【问题标题】:Include module in a class within the module在模块内的类中包含模块
【发布时间】:2014-09-29 18:44:53
【问题描述】:

我有两节课。我想命名它们。我也有一些他们共享的功能。我做这样的事情:

module Talker
  def say_bye
    puts 'bye'
  end

  class Bob
    include Talker
    def say_yo
      puts 'yo'
    end
  end

  class Tom
    include Talker
    def say_hello
      puts 'hello'
    end
  end
end

这些都是有效的方法调用。

Talker::Bob.new.say_yo
Talker::Bob.new.say_bye
Talker::Tom.new.say_hello
Talker::Tom.new.say_bye

有人告诉我:“这个include 将再次包含Bob。在开始包含Talker 的课程之前,您应该关闭Talker 模块。”如果我做的事情会导致意外的红宝石行为或被认为是禁忌,有人可以向我解释吗?从该模块的类中包含这样的模块是一种不好的做法吗?对这种模式有什么批评?我应该在这里使用继承吗?

【问题讨论】:

  • 你确定Bob.new.say_yo等有效吗(来自主环境)?
  • 您的示例不会产生您得到的错误
  • 已编辑:调用不起作用,因为我在类前面没有命名空间。问题不是“为什么这不起作用”或“为什么会出错”?它有效,并且没有错误。问题是如果 A) 可以这样做吗? B)它在幕后做了什么我不知道的坏事吗?

标签: ruby recursion namespaces include


【解决方案1】:

我想通了。包含最终有点递归。上面的代码会做这样的事情:

Talker::Bob::Bob
Talker::Bob::Tom
Talker::Bob::Bob::Bob::Tom::Bob::Tom

这不是必须的。因此,当他说它将把模块中的其他类重新包含到包含该模块的每个类中时,他是对的。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-10-28
    • 1970-01-01
    • 2018-03-24
    • 2012-02-19
    • 2013-08-22
    • 1970-01-01
    • 2015-02-10
    相关资源
    最近更新 更多