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


当前回答

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

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

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

其他回答

上述语句的正确语法是:

if (defined?(var)).nil? # will now return true or false
 print "var is not defined\n".color(:red)
else
 print "var is defined\n".color(:green)
end

用变量替换(var)。该语法将返回一个true/false值,用于if语句的计算。

定义?(your_var)将工作。取决于你在做什么你也可以做your_var。nil?

此外,你可以检查它是否通过插值在字符串中定义,如果你编码:

puts "Is array1 defined and what type is it? #{defined?(@array1)}"

如果定义了类型,系统会告诉您。 如果没有定义,它将返回一个警告,说变量没有初始化。

希望这能有所帮助!:)

使用定义的?关键字(文档)。它将返回一个包含项目类型的String,如果不存在则返回nil。

>> a = 1
 => 1
>> defined? a
 => "local-variable"
>> defined? b
 => nil
>> defined? nil
 => "nil"
>> defined? String
 => "constant"
>> defined? 1
 => "expression"

正如skalee评论的那样:“值得注意的是,设置为nil的变量是初始化的。”

>> n = nil  
>> defined? n
 => "local-variable"

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

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