如何检查是否在 Ruby 中定义一个变量?有没有isset-键入可用的方法吗?

2008-11-13 23:14:05
问题评论:

回答:

使用defined?关键字 (文档)。如果它不存在,则它将返回具有何种项目,或nil的字符串。

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

作为 skalee 注释:"值得注意初始化该变量设置为零。"

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

值得说明的设置为nil初始化该变量。

如果您想要设置一个变量,如果它不存在,并且离开它单独如果是这样,请参阅 @danmayer 的答案 (涉及||=运算符) 下方。

这就是因此 rad。

这很有用,如果您希望什么也不做,如果它不存在,但如果它不存在,请创建它。

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

这只一次创建新的实例。之后,它只使返回差异

它非常惯用的 Ruby 太,非常典型,顺便说一句。

此输入,谢谢 !我是 ruby/轨道初级,来自这种语法在昨天晚上已经很难搞清楚什么它是我。看起来非常方便 !

这不适用于定义常量

只是不要使用||=具有布尔值,以免感到混乱的痛苦。

以及什么 @AndrewMarshall 所说,避免做任何事情,除非您确实想要每次调用它时它并不返回nil时计算表达式的值可能会返回nil以及此用法

上面的语句的正确语法是︰

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

与您定义的变量替换 (var)。此语法将返回真/假值计算中 if 语句。

不一定为零的计算结果为 false 时测试中使用

为什么没有定义defined?(var) == nil ?

@vol7ron-的完全有效的语法。使用调用.nil?是更习惯,正如他们所说。很多"面向对象"询问对象如果它nil比使用比较运算符。两者都不是难以阅读,因此,使用一种可以帮助您提供更多的产品。

哪句话是与? !?不要使用作为注释停下手中的答案。

defined?(your_var)起作用。取决于您正在做什么您还可以执行类似your_var.nil?

为 + 1 your_var.nil?因为它返回 false,并且是得好些,读取和写入比defined? var对此表示感谢。

your_var.nil?将导致错误︰undefined local variable or method your_var时不定义之前...

而不是"if"尝试"除非"

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

什么不会此答案添加其他答案没有说法?

它可以非常巧妙地回答的问题中更有用的一种方法,不是吗?

Ruby 的文风说"除非愿意负条件如果" github.com/bbatsov/ruby-style-guide

内容来源于Stack Overflow Checking if a variable is defined?
请输入您的翻译

Checking if a variable is defined?

确认取消