Ruby koans:停留在 koan 267

Ruby koans: Stuck on koan 267

我一直在网上寻找,但我似乎无法破解这个 poxy Proxy koan!
这是我的代理类:

class Proxy
  def initialize(target_object)
    @object = target_object
    # ADD MORE CODE HERE
    @messages = []
  end

  # WRITE CODE HERE
  def method_missing(method_name, *args)
    if @object.respond_to?(method_name)
      @messages << method_name
      @object.__send__(method_name, *args)          
    end
  end


end

在代码的下方,Proxy Television 被实例化并将其 .channel 设置为 10,因此:

tv = Proxy.new(Television.new)
tv.channel = 10

我现在收到以下错误:

expected 10 to equal [:channel=, :power, :channel]

我有很多问题,不知道从哪里开始:
为什么 method_missing 方法 return 是一个数组?
为什么数组中的第一个元素以“=”结尾?
为什么,当我添加...

def channel
    @object.channel
end

...对于代理,koans 命令行会抛出那些精心绘制的 'mountains are again merely mountains' 错误之一吗?
最后,我现在可以退出吗?

如有任何关于这些问题的建议,我们将不胜感激。

不要放弃! :)

我想您必须了解的主要内容是 method_missing 方法。在 if 语句中,最后一行采用目标对象(在本例中为 Television 的实例)正在调用的方法并将其保存在名为 @messages 的数组中。当您执行 tv.channel = 10 时,您的目标对象正在调用 channel= 方法。

因为这是方法中的最后一件事,method_missing returns 该数组。

数组中的第一项就是"channel="方法,这是ruby中的方法命名约定。

至于最后一个问题,它会抛出一个错误,因为你是从它自身内部调用该方法,理论上它会永远持续下去。

我希望这是有道理的。