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


当前回答

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

其他回答

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

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

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

这里有一些代码,没有火箭科学,但它工作得足够好

require 'rubygems'
require 'rainbow'
if defined?(var).nil?  # .nil? is optional but might make for clearer intent.
 print "var is not defined\n".color(:red)
else
 print "car is defined\n".color(:green)
end

显然,着色代码是不必要的,在这个玩具示例中只是一个漂亮的可视化。

留下一个非常简单的例子,以防有用。

当变量不存在时:

if defined? a then "hi" end
# => nil

当变量存在时:

a = 2
if defined? a then "hi" end
# => "hi"

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

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

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