1

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

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

尝试与 a 类似的东西Fixnum不起作用:

def 3.foo
  puts "3"
end

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

这是什么原因?

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

4

1 回答 1

5

这里有两件事在起作用。

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

第二件事是 Ruby 的语法很复杂,因此有很多黑暗的极端情况。您似乎找到了一个,其中.符号的不同用途表示小数分隔符和方法选择器以神秘的方式相互冲突。

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

object = 3

def object.foo
  puts "3"
end
# TypeError: can't define singleton
于 2017-07-09T21:38:28.597 回答