'#[](论证)'工作?

时间:2018-01-22 02:37:26

标签: ruby methods

我遇到了以下代码:

class Duration    
  def self.[](magnitude)
     ...
  end
end

我可以做以下事情:

Duration.[]("2 weeks")

以及:

Duration["2 weeks"]

我放在"2 weeks"里面的值[ ]如何作为参数传递给方法?

2 个答案:

答案 0 :(得分:1)

在对@Nabin Paudyal的评论中回答你的问题。 这条线

def self.[](magnitude)
class Duration体内的

表示英文(红宝石味):

"打开对象Duration的单例类并添加到其中'实例方法' for object(在我们的例子中是Class类的对象 - 名为Duration)"

通常看起来应该是这样的:

def self.method_name(arguments)

在此之后你可以这样称呼它:

object.method_name(arguments)

在您的情况下,对象的名称是Duration(类),方法的名称是[]。 因此,呼叫应如下所示:

Duration.[](argument)

换句话说,你是完全正确的。它是"调用某种方法"。

答案 1 :(得分:0)

这是因为Ruby语言就是这样设计的。

我们采取以下示例。

array = [1, 2, 3, 4, 5]

此处以下两个代码都会产生相同的结果。

puts array[2]
puts array.[](2)

Ruby的Array类具有以下方法

[](index)

此方法返回指定索引处的元素。

array[2] 

也被解释为

array.[](2) 

在计算结果之前。

希望这会对你有所帮助。