2014-07-15 63 views
2

禮貌IRB的:是否有'variable_get'方法?如果不是,我該如何創建自己的?

2.0.0-p0 :006 > @instance_variable = "from an instance variable" 
=> "from an instance variable" 
2.0.0-p0 :007 > variable = "from a variable" 
=> "from a variable" 
2.0.0-p0 :008 > instance_variable_get(:@instance_variable) 
=> "from an instance variable" 
2.0.0-p0 :009 > variable_get(:variable) 
NoMethodError: undefined method `variable_get' for main:Object 
    from (irb):9 
    from /usr/local/rvm/rubies/ruby-2.0.0-p0/bin/irb:16:in `<main>' 
2.0.0-p0 :010 > 

我只是想以編程「查詢」的一個變量,並返回其內容。完全像instance_variable_get,但是對於一個變量。

這是一個自定義的rspec匹配器。沒有一些瘋狂的解決方法:)

回答

9

在Ruby 2.1及更高版本,可以使用Binding#local_variable_get

在之前的Ruby版本中,您必須使用eval。如果您想在評估假定的變量名稱之前進行一些理智檢查,則可以檢查指定的變量是否在local_variables中。

+1

謝謝,很高興在一段時間後再次學習新的東西。 –

+0

很高興知道,謝謝。 –

1

你可以使用eval

irb(main):007:0> variable = "from a variable" 
=> "from a variable" 
irb(main):008:0> eval 'variable' 
=> "from a variable" 
+0

當然!爲了避免像我想象中的瘟疫一樣的病態,我的條件非常好。我認爲在這種情況下會很好。 – Starkers

+0

'eval'並非天生就是邪惡的。對來自未知來源的數據使用'eval'是。如果數據來自用戶的輸入,那麼您必須清理數據,或者有辦法在沙箱中運行它,以免造成問題。如果你或者你的程序是數據的來源,那麼使用eval就可以了,比如當你想知道一個特定局部變量的值時。 –

相關問題