Ruby koans:坚持koan 267

时间:2015-01-06 14:17:49

标签: ruby proxy

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

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

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

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

我现在收到以下错误:

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

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

def channel
    @object.channel
end

...对于代理,koans命令行是否会抛出其中一个精心绘制的“山脉再次只是山脉”错误?
最后,我现在可以退出吗?

对这些问题的任何建议都将不胜感激。

1 个答案:

答案 0 :(得分:2)

不要放弃! :)

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

由于这是方法中的最后一件事,method_missing返回该数组。

数组中的第一项只是&#34; channel =&#34;方法,这是ruby中的方法命名约定。

至于最后一个问题,它会抛出一个错误,因为你从内部调用了这个方法,理论上它将永远存在。

我希望这是有道理的。