我一直在网上寻找,但我似乎无法破解这个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命令行是否会抛出其中一个精心绘制的“山脉再次只是山脉”错误?
最后,我现在可以退出吗?
对这些问题的任何建议都将不胜感激。
答案 0 :(得分:2)
不要放弃! :)
我想你必须要理解的主要是method_missing方法。在if语句中,最后一行采用目标对象(在本例中为Television实例)调用的方法,并将其保存在名为@messages的数组中。执行tv.channel = 10
时,目标对象正在调用channel=
方法。
由于这是方法中的最后一件事,method_missing返回该数组。
数组中的第一项只是&#34; channel =&#34;方法,这是ruby中的方法命名约定。
至于最后一个问题,它会抛出一个错误,因为你从内部调用了这个方法,理论上它将永远存在。
我希望这是有道理的。