例如,数组类有一个名为“.sort”的方法,您可以使用以下语法在数组上调用该方法:
[2, 3, 4, 1].sort
根据我的有限知识,我只知道如何编写采用实际参数的方法:
def sort(array)
...
end
并且这样称呼:
sort([2, 3, 4, 1])
你如何设置一个可以用点表示法调用的方法(如果我错了请纠正我)语法?
*为了澄清,我正在尝试将一个方法添加到现有的类Array中,该类可以删除重复的对象。我知道“.uniq”方法已经做到了,但我正在重写它,目的是了解它是如何完成的。我只知道如何编写方法:
def my_uniq(array)
...
end
其中数组是我可以在我的方法中使用的参数。
答案 0 :(得分:2)
您应该开始考虑向对象发送消息。即,不要将它们视为调用方法,而是将它们视为sending message to object(s)
。当您发送消息时,该对象将检查它是否可以满足请求(即检查此处或其父级中是否存在该名称的方法),如果是这样的话。实质上,sort
是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
***
**
*
答案 1 :(得分:0)
这取决于“论证”是什么。在你的例子中:
[2, 3, 4, 1].sort
参数是Array
的实例。你可以修补Array
来添加你选择的方法:
class Array
def hi
"Hi, #{length}"
end
end
puts [1,2,3].hi
=> Hi, 3