require bigdecimal
BigDecimal.class # => Class
所以BigDecimal
是一类。
但是同时,BigDecimal
可以像方法一样被调用:
BigDecimal("42.0") # => 0.42e2
其背后的机制是什么?我如何看到BigDecimal
是可呼叫的?以及如何使自己的类常量可调用?
答案 0 :(得分:3)
BigDecimal
是一个类,但它也是Kernel
模块中定义的方法。
由于Kernel
模块与Object
类混合在一起,因此不必定义内核中定义的方法。
From the docs:Kernel模块包含在Object类中,因此它的方法在每个Ruby对象中都可用。
Ruby知道Array.new
和Array(1)
是不同的东西,因为常量(classes and modules are constants)不接收参数。
class Abc
end
def Abc
puts 'Method called'
end
Abc()
#=> Method called
Abc
#=> Abc (Class)
Matz曾经说过:
我正在尝试使Ruby自然化,而不是简单。 Ruby外观简单,但是内部却非常复杂,就像我们的人体一样。