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中的方法命名约定。
至于最后一个问题,它会抛出一个错误,因为你是从它自身内部调用该方法,理论上它会永远持续下去。
我希望这是有道理的。
我一直在网上寻找,但我似乎无法破解这个 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中的方法命名约定。
至于最后一个问题,它会抛出一个错误,因为你是从它自身内部调用该方法,理论上它会永远持续下去。
我希望这是有道理的。