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


当前回答

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

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

其他回答

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

你可以试试:

unless defined?(var)
  #ruby code goes here
end
=> true

因为它返回一个布尔值。

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

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

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

希望这能有所帮助!:)

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

当变量不存在时:

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

当变量存在时:

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

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

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

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