我可以检查是否定义了局部变量,并将其命名为字符串?
我知道函数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 :(得分: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
,因此如果您不严格控制要传递给它的字符串,则会很危险。如果这些字符串来自用户输入,绝对不应该这样做。