0

例如,数组类有一个名为“.sort”的方法,您可以使用以下语法对数组调用该方法:

[2, 3, 4, 1].sort

根据我有限的知识,我只知道如何编写带有实际参数的方法:

def sort(array)
   ...
end 

并被称为:

sort([2, 3, 4, 1])

你将如何设置一个可以用点表示法调用的方法(如果我错了,请纠正我)语法?

*为了澄清,我试图在现有的类数组中添加一个可以删除重复对象的方法。我知道“.uniq”方法已经做到了,但我正在重写它以了解它是如何完成的。我只知道如何编写这样的方法:

def my_uniq(array)
   ...
end

其中数组是我可以在我的方法中使用的参数。

4

2 回答 2

2

您应该开始考虑向对象发送消息。即,不要将它们视为调用方法,而是将它们视为sending message to object(s). 当您确实发送消息时,该对象将检查它是否可以满足请求(即检查此处或其父级中是否存在该名称的方法)如果可以。所以本质上,thesort是一个对象的消息(方法)array

class Array
  def sort
    # do sorting
  end

  # example taken from @codycaughlan 
  # allows you to send message `hi` to your array object
  def hi
    "Hi, #{length}"
  end
end

# so instead of calling method hi([2,9,0]) 
# send hi message to an array object

[2,9,0].hi

# instead of calling method sort([2,9,0])
# send sort message to an array object

[2,9,0].sort

更新

假设您要编写一个适用于数组的方法,该数组打印*乘以您传递的数字。

class Array
  def print_stars
    self.each { |i| puts "*" * i}
  end
end

# now let us send a message / call
[1,2,3].print_stars #=> this should produce

*
**
***

您可能已经知道,这些消息可以链接起来。例如

[1,2,3].reverse.print_stars  #=> produces

***
**
*
于 2013-08-31T08:41:58.090 回答
0

这取决于“论据”是什么。在您的示例中:

[2, 3, 4, 1].sort

参数是 的一个实例Array。您可以通过猴子补丁Array添加您选择的方法:

class Array
  def hi
    "Hi, #{length}"
  end
end

puts [1,2,3].hi

=> Hi, 3
于 2013-08-31T07:29:33.607 回答