mos*_*shi 5 ruby hook inheritance callback
我在 Ruby 中遇到了一些关于回调(和继承)的问题。这是我的代码:
class Lmao
def initialize
@str = "HAHAHAHAHAHHAHAHAH"
@before_laughing = []
end
def self.inherited(base)
base.extend(Callbacks)
end
def laughing
@before_laughing.each {|method| send(method) }
@str
end
end
module Callbacks
def before_laughing(*methods)
@before_laughing = methods
end
end
class Lol < Lmao
before_laughing :downcase_please
def downcase_please
@str.downcase!
end
end
a = Lol.new
a.laughing # => "HAHAHAHAHAHHAHAHAH"
Run Code Online (Sandbox Code Playgroud)
正如您所看到的,我的笑前回调不起作用...因为数组 @before_laughing 是空的。我相信可以通过编辑将 *methods 保存到 Lol 实例方法中的方式(从回调内部)来解决此问题。但我真的不明白如何...
如果您知道解决方案,感谢您的光临!
代码中调用了两种不同的实例变量:一种是类实例的实例变量,它在的实例方法中初始化为(即空) ,并在的实例方法中读取。但是,由于该实例变量写入的唯一位置是初始值设定项,因此它将始终为空。@before_laughingLmao[]ArrayLmaoinitializeLmaolaughingArray
另一个实例变量是Lol类对象本身的实例变量,它被设置到方法Array [:downcase_please]的内部before_laughing。然而,这篇文章永远不会被阅读。