检查是否定义了局部变量,并将其名称作为ruby中的字符串

时间:2015-05-06 08:24:30

标签: ruby reflection

我可以检查是否定义了局部变量,并将其命名为字符串?

我知道函数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?,但似乎没有效果......

3 个答案:

答案 0 :(得分:4)

当有问题的局部变量(在上下文中定义)时,以下将返回true,在该点之前的位置不需要:

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

答案 1 :(得分:4)

从Ruby 2.1.0开始,您可以使用Binding#local_variable_defined?

a = 'cat'
binding.local_variable_defined? 'a' #=> true
binding.local_variable_defined? 'b' #=> false

答案 2 :(得分:3)

您可以使用eval执行此操作:

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

免责声明:此答案使用eval,因此如果您不严格控制要传递给它的字符串,则会很危险。如果这些字符串来自用户输入,绝对不应该这样做。