gpt4 book ai didi

ruby - 在 Fixnum 的实例上定义方法

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

我可以像这样在一个实例上定义一个方法:

object = Object.new
def object.foo
puts "5"
end

Fixnum 尝试类似的东西是行不通的:

def 3.foo
puts "3"
end

def 3.foo
^
(irb):7: syntax error, unexpected keyword_end, expecting end-of-input

这是什么原因?

我知道这是我永远不应该做的事情。我只是想知道为什么这不能像我预期的那样工作。

最佳答案

这里有两件事在起作用。

一件事是 Fixnum 不能有单例方法。但是,我们还没有到那一步,因为您的代码有语法错误,因此 Ruby 一开始甚至尝试运行它。

其次,Ruby 的语法很复杂,因此有很多暗角案例。您似乎已经找到了一个,其中 . 符号的不同用法以表示小数点分隔符和方法选择器以神秘的方式相互冲突。

现在,当然,这实际上并不是什么大问题,因为正如我之前提到的,Fixnum 无论如何都不能有单例类:

object = 3

def object.foo
puts "3"
end
# TypeError: can't define singleton

关于ruby - 在 Fixnum 的实例上定义方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45000850/

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