gpt4 book ai didi

ruby - 定义?在 Ruby 中可以在 irb 中使用,但不能在我的类文件中使用

转载 作者:太空宇宙 更新时间:2023-11-03 17:19:26 26 4
gpt4 key购买 nike

我正在编写一个小型堆实现,在创建我的 Node 类时,我注意到一些奇怪的行为。我想调用 defined?(x) 以确保定义了 x,然后检查 x 是否为整数,然后再将其存储在节点的值类变量。在IRB我可以打电话defined?(x) 结果为 nil。

但是,在类里面,我尝试这样做:

def change_value value
@value = value if defined?(value)
end

当我用一个随机字母调用 change_value 时的结果,比方说“e”,是标准的未定义局部变量或方法错误。同样,在 IRB 中它似乎工作正常,我想知道我是否有某种环境问题,或者这是否不是检查值是否真的存在的“最佳”方法。

谢谢。

最佳答案

(编辑:DigitalRoss 已经清理了问题的格式,因此关于格式的评论和最初的重写可能不再适用。我会保留它们,直到我从OP。)

这是一种几乎不可读的方法编写方式,它甚至无法在我的机器(Ruby 1.8.7)上进行解析。

我假设你的意思是:

def change_value(value)
@value = value if defined?(value)
end

当我调用它时它工作正常,但它不正确。 nil 和 undefined 是 Ruby 中的两个不同的野兽; value始终 在该上下文中定义,因为它是已声明的方法参数。我怀疑你真正想要的是:

def change_value(value)
@value = value unless value.nil?
end

请注意,有些人会简单地将其写为:

def change_value(value)
@value = value if value
end

因为 nil 是“假的”。但是,这种形式将 nilfalse 混为一谈,因此养成这种习惯可不是个好习惯。

关于ruby - 定义?在 Ruby 中可以在 irb 中使用,但不能在我的类文件中使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1705096/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com