2015-05-06 41 views
2

我可以檢查是否定義了局部變量,因爲它的名稱是字符串嗎?檢查是否定義了局部變量,因爲它的名稱是ruby中的字符串

我知道有函數defined?,但你必須給自己的變量。

例子:

a = 'cat' 
print defined?(a) # => "cat" 
print defined?(b) # => nil 

我需要的是:

a = 'cat' 
print string_defined?("a") # => "cat" 
print string_defined?("b") # => nil 

或者類似的東西。我找不到它在文檔...

我試圖用respond_to?,但似乎並不工作...

+0

@AndreyDeineko因爲我想要做的事,如:'list_of_strings.reject {| S | !string_defined?(s)}','list_of_strings'參數化。 – ProGM

回答

3

可以使用eval做到這一點:

a = 'cat' 
eval("defined?(#{'a'})") 
=> "local-variable" 
eval("defined?(#{'b'})") 
=> nil 

免責聲明:這個答案利用了eval,所以如果你不嚴格控制你想要傳入的字符串,這可能會很危險。如果這些字符串來自用戶輸入,絕對不應該這樣做。

+2

你的回答是正確的(第一次是從我這裏得到的),但是準備好讓愚蠢的用戶開始對你投降。參看http://meta.stackoverflow.com/questions/291823/how-to-deal-with-users-who-unconditionally-react-against-eval。 – sawa

+0

這非常聰明。這將**完全**我所問,因爲它使用原來的'defined?'方法。 – ProGM

3
local_variables.include?("a".to_sym) 
#=> true 
+0

那麼'local_variables'包含一個在範圍中定義的變量的所有符號名稱列表? – ProGM

相關問題