คำถามติดแท็ก eval

eval เป็นฟังก์ชันที่ช่วยให้โปรแกรมเมอร์สามารถรันโค้ดที่เขียนขึ้นโดยอำเภอใจซึ่งเขียนด้วยภาษาเดียวกันจากตัวแปรสตริงภายในโค้ด


3
อะไรคือความแตกต่างระหว่าง eval, exec และ compile?
ฉันได้ดูการประเมินรหัส Python แบบไดนามิกและพบกับeval()และcompile()ฟังก์ชั่นและexecคำสั่ง ใครช่วยอธิบายความแตกต่างระหว่างevalและกับexecและโหมดที่แตกต่างกันได้compile()อย่างไร
428 python  dynamic  eval  exec 

10
Eval Python () ทำอะไรได้บ้าง
ในหนังสือที่ฉันอ่านบน Python มันจะใช้รหัสต่อไป eval(input('blah')) ฉันอ่านเอกสารและเข้าใจ แต่ก็ยังไม่เห็นว่ามันเปลี่ยนinput()ฟังก์ชั่นอย่างไร มันทำอะไร? มีคนอธิบายได้ไหม
306 python  eval 

6
ประเมินการแสดงออกที่กำหนดให้เป็นสตริง
ฉันอยากรู้ว่า R สามารถใช้eval()ฟังก์ชั่นเพื่อทำการคำนวณโดยสตริงหรือไม่ นี่เป็นกรณีทั่วไป: eval("5+5") อย่างไรก็ตามแทนที่จะเป็น 10 ฉันจะได้รับ: [1] "5+5" ทางออกใด ๆ
283 r  eval  r-faq 

26
JavaScript ของ eval () ไม่ใช่ชั่วเมื่อใด
ฉันกำลังเขียนโค้ดจาวาสคริปต์เพื่อแยกฟังก์ชั่นที่ผู้ใช้ป้อน (สำหรับการทำงานเหมือนสเปรดชีต) เมื่อแยกสูตรแล้วฉันสามารถแปลงเป็น JavaScript และเรียกใช้eval()เพื่อให้ได้ผลลัพธ์ อย่างไรก็ตามฉันมักจะเบือนหน้าหนีจากการใช้งานeval()ถ้าฉันสามารถหลีกเลี่ยงได้เพราะมันเป็นสิ่งที่ชั่วร้าย (และถูกหรือผิดฉันคิดเสมอว่ามันเป็นสิ่งที่เลวร้ายกว่าใน JavaScript เพราะรหัสที่จะถูกประเมินอาจมีการเปลี่ยนแปลงโดยผู้ใช้ ) ดังนั้นเมื่อไรที่จะใช้มัน?

6
ใช้ eval python () กับ ast.literal_eval () หรือไม่
ฉันมีสถานการณ์ที่มีรหัสบางอย่างที่eval()เกิดขึ้นเป็นวิธีแก้ปัญหาที่เป็นไปได้ ตอนนี้ฉันไม่เคยใช้eval()มาก่อน แต่ฉันได้เจอข้อมูลมากมายเกี่ยวกับอันตรายที่อาจเกิดขึ้นได้ ที่กล่าวว่าฉันระมัดระวังมากเกี่ยวกับการใช้มัน สถานการณ์ของฉันคือฉันมีอินพุตที่ได้รับจากผู้ใช้: datamap = raw_input('Provide some data here: ') ในกรณีที่datamapความต้องการที่จะเป็นพจนานุกรม ฉันค้นหาไปรอบ ๆ และพบว่าeval()สามารถแก้ไขปัญหานี้ได้ ฉันคิดว่าฉันอาจสามารถตรวจสอบชนิดของอินพุตก่อนที่จะพยายามใช้ข้อมูลและนั่นจะเป็นการป้องกันความปลอดภัยที่ทำงานได้ datamap = eval(raw_input('Provide some data here: ') if not isinstance(datamap, dict): return ฉันอ่านเอกสารและฉันยังไม่ชัดเจนว่าจะปลอดภัยหรือไม่ Eval ประเมินข้อมูลทันทีที่ป้อนหรือหลังจากdatamapเรียกตัวแปรหรือไม่ เป็นastโมดูล.literal_eval()ตัวเลือกที่ปลอดภัยเท่านั้น?

10
คำสั่ง eval ใน Bash และการใช้งานทั่วไป
หลังจากอ่านหน้าคนทุบตีและเกี่ยวกับการโพสต์นี้ ฉันยังคงมีปัญหาในการเข้าใจสิ่งที่evalคำสั่งทำและสิ่งที่จะเป็นประโยชน์โดยทั่วไป ตัวอย่างเช่นถ้าเราทำ: bash$ set -- one two three # sets $1 $2 $3 bash$ echo $1 one bash$ n=1 bash$ echo ${$n} ## First attempt to echo $1 using brackets fails bash: ${$n}: bad substitution bash$ echo $($n) ## Second attempt to echo $1 using parentheses fails bash: 1: …
166 linux  bash  shell  scripting  eval 

19
แปลงสตริงเป็นสตริงแม่แบบ
เป็นไปได้ไหมที่จะสร้างเทมเพลตสตริงเป็นสตริงปกติ let a="b:${b}"; แล้วแปลงเป็นสตริงแม่แบบ let b=10; console.log(a.template());//b:10 โดยไม่ต้องeval, new Functionและวิธีการอื่น ๆ ของการสร้างรหัสแบบไดนามิก?

5
ยกตัวอย่างคลาสจากตัวแปรใน PHP หรือไม่?
ฉันรู้ว่าคำถามนี้ฟังดูค่อนข้างคลุมเครือดังนั้นฉันจะทำให้ชัดเจนขึ้นด้วยตัวอย่าง: $var = 'bar'; $bar = new {$var}Class('var for __construct()'); //$bar = new barClass('var for __construct()'); นี่คือสิ่งที่ฉันต้องการจะทำ คุณจะทำอย่างไร ฉันสามารถใช้ eval () ได้เช่นนี้: $var = 'bar'; eval('$bar = new '.$var.'Class(\'var for __construct()\');'); แต่ฉันอยากอยู่ให้ห่างจาก eval () มีวิธีการทำเช่นนี้โดยไม่ต้อง eval ()?
146 php  class  variables  eval 

12
ทำไมความชั่วร้ายจึงเป็นจริง?
ฉันรู้ว่าโปรแกรมเมอร์ Lisp และ Scheme มักจะบอกว่าevalควรหลีกเลี่ยงเว้นแต่จำเป็นอย่างเคร่งครัด ผมเคยเห็นคำแนะนำเหมือนกันสำหรับการเขียนโปรแกรมภาษาหลาย evalแต่ฉันยังไม่เห็นรายชื่อของการขัดแย้งที่ชัดเจนกับการใช้งานของ ฉันจะหาบัญชีของปัญหาที่อาจเกิดขึ้นจากการใช้งานได้evalที่ไหน ตัวอย่างเช่นผมรู้ว่าปัญหาของGOTOในการเขียนโปรแกรมขั้นตอน (โปรแกรมทำให้อ่านได้ยากและยากที่จะรักษาทำให้ปัญหาความปลอดภัยยากที่จะหา ฯลฯ ) evalแต่ผมไม่เคยเห็นมีปากเสียงกับ ที่น่าสนใจข้อโต้แย้งที่เหมือนกันGOTOนั้นน่าจะใช้ได้กับการต่อเนื่อง แต่ฉันเห็นว่า Schemers นั้นจะไม่พูดว่าการต่อเนื่องนั้นเป็น "ความชั่วร้าย" - คุณควรระวังเมื่อใช้มัน พวกเขามีแนวโน้มที่จะขมวดคิ้วเมื่อใช้โค้ดevalมากกว่าใช้โค้ดต่อเนื่อง (เท่าที่ฉันเห็น - ฉันอาจผิด)

8
เหตุใดการใช้ "eval" จึงเป็นการปฏิบัติที่ไม่ดี
ฉันใช้คลาสต่อไปนี้เพื่อจัดเก็บข้อมูลเพลงของฉันได้อย่างง่ายดาย class Song: """The class to store the details of each song""" attsToStore=('Name', 'Artist', 'Album', 'Genre', 'Location') def __init__(self): for att in self.attsToStore: exec 'self.%s=None'%(att.lower()) in locals() def setDetail(self, key, val): if key in self.attsToStore: exec 'self.%s=val'%(key.lower()) in locals() ฉันรู้สึกว่าสิ่งนี้สามารถขยายได้มากกว่าการเขียนif/elseบล็อก อย่างไรก็ตามevalดูเหมือนว่าจะถือเป็นการปฏิบัติที่ไม่ดีและไม่ปลอดภัยในการใช้งาน ถ้าเป็นเช่นนั้นใครช่วยอธิบายให้ฉันเข้าใจว่าทำไมและแสดงวิธีที่ดีกว่าในการกำหนดชั้นเรียนข้างต้น
141 python  eval 

1
ทำไม {} + {} เป็น NaN เฉพาะฝั่งไคลเอ็นต์เท่านั้น ทำไมไม่ใช้ Node.js?
ในขณะที่[] + []เป็นสตริงว่าง[] + {}เป็น"[object Object]"และเป็น{} + [] 0ทำไมเป็น{} + {}NaN > {} + {} NaN คำถามของฉันไม่ได้เป็นเหตุผลที่({} + {}).toString()ถูก"[object Object][object Object]"ในขณะที่NaN.toString()เป็น"NaN", ส่วนนี้มีคำตอบที่นี่แล้ว คำถามของฉันคือทำไมสิ่งนี้เกิดขึ้นเฉพาะฝั่งไคลเอ็นต์เท่านั้น ในฝั่งเซิร์ฟเวอร์ ( Node.js ) คือ{} + {}"[object Object][object Object]" > {} + {} '[object Object][object Object]' สรุป : ในฝั่งไคลเอ็นต์: [] + [] // Returns "" [] + …

20
การเรียกใช้องค์ประกอบ <script> แทรกด้วย .innerHTML
ฉันมีสคริปต์ที่แทรกเนื้อหาบางส่วนลงในองค์ประกอบโดยใช้innerHTML. ตัวอย่างเช่นเนื้อหาอาจเป็น: &lt;script type="text/javascript"&gt;alert('test');&lt;/script&gt; &lt;strong&gt;test&lt;/strong&gt; ปัญหาคือโค้ดภายใน&lt;script&gt;แท็กไม่ได้รับการดำเนินการ ฉัน googled เล็กน้อย แต่ไม่มีวิธีแก้ปัญหาที่ชัดเจน หากฉันแทรกเนื้อหาโดยใช้ jQuery $(element).append(content);ส่วนของสคริปต์จะได้รับeval'd ก่อนที่จะฉีดเข้าไปใน DOM มีใครมีข้อมูลโค้ดที่เรียกใช้&lt;script&gt;องค์ประกอบทั้งหมดหรือไม่ โค้ด jQuery ค่อนข้างซับซ้อนดังนั้นฉันจึงไม่สามารถเข้าใจได้ว่ามันเป็นอย่างไร แก้ไข : เมื่อมองเข้าไปในโค้ด jQuery ฉันได้จัดการเพื่อหาว่า jQuery ทำอย่างไรซึ่งส่งผลให้เกิดรหัสต่อไปนี้: Demo: &lt;div id="element"&gt;&lt;/div&gt; &lt;script type="text/javascript"&gt; function insertAndExecute(id, text) { domelement = document.getElementById(id); domelement.innerHTML = text; var scripts = []; ret = domelement.childNodes; for ( …

8
จะแก้ไขตัวแปรส่วนกลางภายในฟังก์ชันใน bash ได้อย่างไร?
ฉันกำลังทำงานกับสิ่งนี้: GNU bash, version 4.1.2(1)-release (x86_64-redhat-linux-gnu) ฉันมีสคริปต์ดังต่อไปนี้: #!/bin/bash e=2 function test1() { e=4 echo "hello" } test1 echo "$e" ซึ่งผลตอบแทน: hello 4 แต่ถ้าฉันกำหนดผลลัพธ์ของฟังก์ชันให้กับตัวแปรตัวแปร global eจะไม่ถูกแก้ไข: #!/bin/bash e=2 function test1() { e=4 echo "hello" } ret=$(test1) echo "$ret" echo "$e" ผลตอบแทน: hello 2 ฉันเคยได้ยินเกี่ยวกับการใช้ evalในกรณีนี้ดังนั้นฉันจึงทำสิ่งนี้ในtest1: eval 'e=4' แต่ผลเดียวกัน. ช่วยอธิบายหน่อยได้ไหมว่าทำไมจึงไม่แก้ไข ฉันจะบันทึกเสียงสะท้อนของtest1ฟังก์ชันในretและแก้ไขตัวแปรส่วนกลางด้วยได้อย่างไร

2
เหตุใดจึงควรหลีกเลี่ยงการประเมินใน Bash และฉันควรใช้อะไรแทน
ครั้งแล้วครั้งเล่าที่ฉันเห็นคำตอบของ Bash ใน Stack Overflow โดยใช้evalและคำตอบได้รับการเจาะรูโดยตั้งใจสำหรับการใช้โครงสร้าง "ชั่วร้าย" ดังกล่าว ทำไมevalชั่วจัง ถ้าevalใช้ไม่ได้อย่างปลอดภัยควรใช้อะไรแทน?
107 linux  bash  unix  eval 

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.