2010-07-16 16 views
8

में eval() के बराबर evthent python में, मैं अपने प्रोग्राम में उपयोगकर्ता दर्ज कोड निष्पादित करने के लिए eval() का उपयोग कर सकता हूं। क्या ग्रोवी में ऐसा कुछ भी है जो मैं कर सकता हूं? मैं एक स्विंग यूआई टेक्स्टबॉक्स चाहता हूं जहां उपयोगकर्ता कोड के एक टुकड़े में प्रवेश करता है जिसे मैं निष्पादित करना चाहता हूं?ग्रोवी

धन्यवाद, हरि

उत्तर

2

इस (लेकिन किसी भी पटकथा भाषा में eval साथ हमेशा की तरह दुर्भावनापूर्ण कोड exeution के बारे में सावधान रहना होगा) का प्रयास करें:

evaluate("print new Date()") 
+0

देख मैं अपने कस्टम व्याकरण में कोड का एक छोटा सा टुकड़ा चलाने के लिए कोशिश कर रहा हूँ - निश्चित रूप से दुर्भावनापूर्ण कोड के लिए जाँच करेगा । – Hari

9

वहाँ से दोनों के अंदर ग्रूवी (चल के कई तरीके हैं जावा और ग्रूवी):

http://groovy.codehaus.org/Embedding+Groovy

तेज विधि तथापि (सरल स्क्रिप्ट के लिए

Eval.me('2 + 2') 

अधिक उदाहरण से यह पेज देखें::

http://mrhaki.blogspot.com/2009/11/groovy-goodness-simple-evaluation-of.html

+0

धन्यवाद यह कोशिश करेगा! – Hari

4

http://groovy.codehaus.org/api/groovy/util/Eval.html

जो तुम जाने की तरह कुछ करना:), Eval वर्ग का उपयोग करने के शायद है हां, Eval.x, Eval.xy, Eval.xyz या Eval.me का उपयोग करके ग्रोवी में कोड को गतिशील रूप से मूल्यांकन करना संभव है। इन विधियों के बारे में अधिक जानकारी के लिए the API doc देखें।

उदाहरण के लिए, अगर आप इस तरह Eval.me का उपयोग करें:

def a = "hello" 
def b = "world" 
Eval.me(""" println "$a $b" """) 
--> hello world 

इसके अलावा, this blog post for some eval examples

+2

आपका मतलब है 'Eval.xy (ए, बी,' println "$ x $ y" ') निश्चित रूप से? ;-) –

+0

अच्छा पकड़, धन्यवाद। Eval.x से Eval.me में बदल दिया गया। Eval.xy बनाम Eval.x के उपयोग पर - यह वरीयता का मामला है। इस मामले में आप उनमें से किसी एक का उपयोग कर सकते हैं। इसके अलावा, आप या तो 'या "" "का उपयोग कर सकते हैं। –