您应该开始考虑向对象发送消息。即,不要将它们视为调用方法,而是将它们视为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
***
**
*