Ruby:BigDecimal:同时一个类和一个方法?

时间:2018-11-18 12:58:13

标签: ruby class methods callable

require bigdecimal
BigDecimal.class     # => Class

所以BigDecimal是一类。

但是同时,BigDecimal可以像方法一样被调用:

BigDecimal("42.0")   # => 0.42e2

其背后的机制是什么?我如何看到BigDecimal是可呼叫的?以及如何使自己的类常量可调用?

1 个答案:

答案 0 :(得分:3)

BigDecimal是一个类,但它也是Kernel模块中定义的方法。

由于Kernel模块与Object类混合在一起,因此不必定义内核中定义的方法。

  

From the docs:Kernel模块包含在Object类中,因此它的方法在每个Ruby对象中都可用。

Ruby知道Array.newArray(1)是不同的东西,因为常量(classes and modules are constants)不接收参数。

class Abc
end

def Abc
  puts 'Method called'
end

Abc()
#=> Method called

Abc
#=> Abc (Class)

Matz曾经说过:

  

我正在尝试使Ruby自然化,而不是简单。 Ruby外观简单,但是内部却非常复杂,就像我们的人体一样。