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

标签 ruby literals singleton-methods

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

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/

相关文章:

ruby - Ruby & Rails 中的大括号 : [Brackets],(圆括号)和 {Curlies}

ruby - LoadError 通过要求带有 :path or :git 的 gem

Ruby 语法 '{:age.gt => 60}' ,它是如何工作的?

Java - 无限循环单例类方法调用

Ruby 套接字性能特点

assembly - 文字 VS 立即操作数

c++ - 为什么字符串文字是 const?

c++ - Qt - 获取 "warning: format not a string literal and no format arguments"

c# - 单例线程安全

ruby - 如何找到私有(private)单例方法