【发布时间】: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