如何检查一个变量是否在Ruby中定义?是否有isset类型的方法可用?


当前回答

定义?这很好,但如果你在Rails环境中,你也可以使用try,特别是在你想检查动态变量名的情况下:

foo = 1
my_foo = "foo"
my_bar = "bar"
try(:foo)        # => 1
try(:bar)        # => nil
try(my_foo)      # => 1
try(my_bar)      # => nil

其他回答

如果它存在,你什么也不做,如果它不存在,你就创建它,这是很有用的。

def get_var
  @var ||= SomeClass.new()
end

这只创建一次新实例。之后它就一直返回var。

试着用“除非”而不是“如果”

a = "apple"
# Note that b is not declared
c = nil

unless defined? a
    puts "a is not defined"
end

unless defined? b
    puts "b is not defined"
end

unless defined? c
    puts "c is not defined"
end

使用定义的?YourVariable 保持简单,傻瓜..;)

应该提到的是,使用defined来检查一个特定的字段是否在哈希中设置,可能会产生意想不到的行为:

var = {}
if defined? var['unknown']
  puts 'this is unexpected'
end
# will output "this is unexpected"

这里的语法是正确的,但定义?Var ['unknown']将被求值为字符串"method",因此if块将被执行

检查哈希中是否存在键的正确符号是:

if var.key?('unknown')

定义?这很好,但如果你在Rails环境中,你也可以使用try,特别是在你想检查动态变量名的情况下:

foo = 1
my_foo = "foo"
my_bar = "bar"
try(:foo)        # => 1
try(:bar)        # => nil
try(my_foo)      # => 1
try(my_bar)      # => nil