在JavaScript中,有一种有用的方法可以测试在任何给定点上从未定义过的变量。例如,以下代码片段将在变量bob未定义时返回true:
typeof(bob)=='undefined'
我该如何在Ruby中实现同样的测试?
编辑:我正在寻找紧凑性相等的测试。我已经想出了一些使用异常等笨拙近似方法,但那些并不太好看!
在JavaScript中,有一种有用的方法可以测试在任何给定点上从未定义过的变量。例如,以下代码片段将在变量bob未定义时返回true:
typeof(bob)=='undefined'
我该如何在Ruby中实现同样的测试?
编辑:我正在寻找紧凑性相等的测试。我已经想出了一些使用异常等笨拙近似方法,但那些并不太好看!
defined?(variable_name)
irb(main):004:0> defined?(foo)
=> nil
irb(main):005:0> foo = 1
=> 1
irb(main):006:0> defined?(foo)
=> "local-variable"
这里有一篇很好的文章讲述它。
defined?
是一个函数,如果该项未定义,则返回nil。
defined? somevar
=> nil
somevar = 12
defined? somevar
=> "local-variable"
所以:
if defined?(somevar)
do_something
end
请记住,如果变量被定义了,defined?将返回一个字符串,如果没有定义,则返回nil,因此应对其结果进行条件检查。我认为该语法暗示它会返回一个布尔值。
所有可能的情况
irb(main):001:0> defined? ur_variable
=> nil
irb(main):001:0> ur_variable= 12
irb(main):002:0> defined? ur_variable
=> "local-variable"
irb(main):001:0> another_variable = nil
irb(main):002:0> defined? another_variable
=> "local-variable"
也可以用这种方式进行测试。
if somevar.nil
# not set do something
else
# is set do something else
end
=> variable_to_test 未定义
variable_to_test = ""
if defined?(variable_to_test) == nil
puts "variable_to_test 未定义"
else
puts "variable_to_test 已定义"
end
=> variable_to_test 已定义
看起来应该有更简单的方法吧? - Greg