加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

Ruby:如何通过继承挂钩回调

发布时间:2020-12-17 02:28:07 所属栏目:百科 来源:网络整理
导读:关于回调(和继承),我遇到了一些关于 Ruby的麻烦.这是我的代码: class Lmao def initialize @str = "HAHAHAHAHAHHAHAHAH" @before_laughing = [] end def self.inherited(base) base.extend(Callbacks) end def laughing @before_laughing.each {|method| se
关于回调(和继承),我遇到了一些关于 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"

正如你所看到的,我之前的笑回调不起作用……因为数组@before_laughing是空的.我相信这可以通过编辑我将*方法保存到Lol的实例方法(来自Callbacks内部)的方式来解决.但我真的不明白……

如果你知道解决方案,谢谢你的光!

解决方法

感谢Mon_Ouie,解决方案是:

class Lmao
  def initialize
    @str = "HAHAHAHAHAHHAHAHAH"
  end

  def self.inherited(base)
    base.extend(Callbacks)
  end

  def laughing
    self.class.callbacks_before_laughing.each {|method| send(method) }
    @str
  end
end

module Callbacks
  def before_laughing(*methods)
    @before_laughing = methods
  end

  def callbacks_before_laughing
    @before_laughing
  end
end

class Lol < Lmao
  before_laughing :downcase_please

  def downcase_please
    @str.downcase!
  end
end

非常棒.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读