我正在编写一个小的Heap实现,在创建我的Node类时,我发现了一些奇怪的行为.我想调用defined?(x)以确保x已定义,然后检查是否x为Integer,然后将其存储在Node的value类变量中.在IRB我可以打电话
defined?(x),结果是零.
但是,在课堂上,我试试这个:
def change_value value
@value = value if defined?(value)
end
Run Code Online (Sandbox Code Playgroud)
当我change_value用随机字母调用时,让我们说'e',是标准的未定义局部变量或方法错误.再次,在IRB中,它似乎工作正常,我想知道我是否有某种环境问题,或者如果这不是检查价值是否确实存在的"最佳"方式.
谢谢.
(编辑:DigitalRoss已经清理了问题的格式,因此格式化和初始重写的注释可能不再适用.我会留下它们,直到我从OP获得一些反馈.)
这是一种几乎不可读的编写方法的方法,它甚至不在我的机器上解析(Ruby 1.8.7).
我假设你的意思是:
def change_value(value)
@value = value if defined?(value)
end
Run Code Online (Sandbox Code Playgroud)
我打电话的时候这很好用,但是不对.nil和undefined是Ruby中的两个不同的野兽; value将始终在该上下文中定义,因为它是声明的方法参数.我怀疑你真正追求的是:
def change_value(value)
@value = value unless value.nil?
end
Run Code Online (Sandbox Code Playgroud)
请注意,有些人会将其写为:
def change_value(value)
@value = value if value
end
Run Code Online (Sandbox Code Playgroud)
因为nil是"虚假的".然而,这种形式合并了nil和false,所以它不是一个好习惯进入.
| 归档时间: |
|
| 查看次数: |
188 次 |
| 最近记录: |