我一直在使用var.nil?
一段时间,这完全是我的代码。突然之间,我得到undefined local variable or method
变量.nil?
后面的.nil?
。
发生了什么事?被me.nil?
打破了吗?我甚至在IRB上尝试过它,以确保它不是我环境中的东西。我应该可以输入:
undefined local variable or method me for main:Object
如果变量尚未定义,那么应该返回true,这就是重点,但我得到了nil?
也许我错了defined?(me) == nil
并且必须使用类似的内容:
.nil?
和nil.nil? -> true
<anything_else>.nil? -> false
只能与现有对象一起使用?这不是我理解的方式。红宝石文档甚至这样说:
unless defined? me
do something
在这里发疯
更多信息
我明白我能做到:
if me.nil?
但相当于if defined?(me) == nil?
只会是:
.nil?
正确?没有别的办法吗?
现在我不仅要质疑我的知识,还要质疑我的理智:)
结论:
好的,所以$
适用于不存在的实例变量,它也适用于不存在的哈希或数组键,但它不适用于不存在的局部变量。对我来说这是一个巨大的错误。你必须记住它几乎可以用于除了最常用的项目(局部变量)之外的所有东西。
我的结论是,这与以下事实有关:一个局部变量可能会混淆Ruby中的一个方法,语法中没有任何东西将它们分开(用法不同是,但我的意思是在其他语言中你添加一个{ {1}}或者变量的任何内容,它永远不会被混淆为方法)。
答案 0 :(得分:1)
实际上,你是对是错。零?适用于实例变量但不适用于本地或类变量。所以,如果你这样做
@me.nil? => true
实例变量不会产生错误,因为默认情况下它们被指定为nil。
但如果你这样做
me.nil? => NameError
答案 1 :(得分:0)
显而易见。如果它是变量或方法,则应先定义。
'me'.nil? -> false. This is correct as the string 'me' is not nil.
在上面的例子中,'me'充当String类的自身对象。
Now, me.nil? without defining the variable or method me will definitely throw an error.
在上面的那个中,me对象没有在任何地方定义。
确保代码最近没有被其他人修改过,比如删除var(变量或方法)的定义或其他内容。
是的,nil只能与现有对象一起使用。当直接使用字符串时,使用自身对象。如果你想使用一个变量,那么肯定应该分配给某个变量。