我可以像这样在一个实例上定义一个方法:
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/