我希望能够在Ruby中做到这一点:
module A
@var = Object.new # could be any object
def f
puts @var.inspect
end
module_function :f
end
module B
def make_it(val)
# creates reference to val in this module under the same name as
# it appears in module A
end
module_function :make_it
end
这样就可以使模块B像模块A一样响应:
B.make_it(# a reference to @var in module A)
B.make_it(# a reference to f in module A)
这将允许B.f像A.f一样行动而B.f将返回'检查' 在模块A中的@var或在B中的@var的'inspect',它是它的副本 在A。
我已经要求在B中提及,但也可以使用副本。
任何人都知道这是否可以做到?举一个例子会很精彩,但任何帮助都会非常感激。我没有运气就google了一下 - 也许我不知道如何用短语来搜索。
答案 0 :(得分:0)
我不确定你为什么要这样做。但是,从外面看,我不确定这是个好主意。 As they say here模块是关于功能的。但它们也像图书馆,所以理想情况下你会希望它们彼此相对独立,而不是真正相互接触。从长远来看,通过减少相互依赖性和破坏代码的可能性,这也会使事情变得更好。
也许你可以合并这两个模块?或者只是在每个中提供重复的代码?