2008-10-19 21 views
17

में सभी परिभाषित चरों का आकलन कैसे करूं, मेरे पास रनटाइम पर संदर्भ में अज्ञात संख्या के चर के साथ एक ग्रोवी स्क्रिप्ट है, मैं उन्हें सभी कैसे ढूंढूं और प्रत्येक के नाम और मूल्य को कैसे प्रिंट करूं?मैं ग्रोवी स्क्रिप्ट

उत्तर

20

ठीक है, आप एक सरल स्क्रिप्ट (जहां "def" कीवर्ड का उपयोग नहीं करते) का उपयोग कर रहे हैं, चर आपके द्वारा निर्धारित में संग्रहीत किया जाएगा बंधन और आप इस तरह उन पर प्राप्त कर सकते हैं:

foo = "abc" 
bar = "def" 

if (true) { 
    baz = "ghi" 
    this.binding.variables.each {k,v -> println "$k = $v"} 
} 

प्रिंटों:

foo = abc 
    baz = ghi 
    args = {} 
    bar = def 

मैं चर "def" कीवर्ड के साथ परिभाषित के माध्यम से गणना करने में एक आसान तरीका के बारे में पता नहीं कर रहा हूँ, लेकिन मैं दिलचस्पी के साथ इस सवाल देख करेंगे, तो देखने के लिए किसी और को जाने कैसे।

+0

'this.binding.variables.each {k, v -> println" $ {v.class} $ k = $ v "} 'यदि आप – smac89

4

दरअसल, टेड का जवाब 'def'ed चर के लिए भी काम करेगा।

 
def foo = "abc" 
def bar = "def" 

if (true) { 
    baz = "ghi" 
    this.binding.variables.each {k,v -> println "$k = $v"} 
} 

 
baz = ghi 
__ = [null, null, null] 
foo = abc 
_ = null 
bar = def 

पैदावार मुझे यकीन है कि _-चर क्या दर्शाता है नहीं कर रहा हूँ, लेकिन मुझे यकीन है कि आप अपने आस-पास काम कर सकते हैं कर रहा हूँ।

+0

' _' के परिणाम भी देखना चाहते हैं तो इसका परिणाम है अंतिम मूल्यांकन अभिव्यक्ति, कम से कम groovysh (और पायथन के आरईपीएल और कई अन्य में) में। '__' के बारे में निश्चित नहीं है, हालांकि मैं इसे किसी अन्य प्रकार के मूल्यांकन इतिहास के रूप में देख सकता हूं। –

+0

तो, यह मेरे लिए काम नहीं करता है। 'def foo =" asdgasgf "; this.binding.variables.each {k, v -> println "$ k $ v"} 'केवल प्रिंट करता है' args [] '। – jonnybot