以下是代码:
module A
class C1
def self.grovel(x)
return A::helper(x) + 3
end
end
class C2
def self.grovel(x)
return A::helper(x) + 12
end
end
private
def helper(y)
y + 7
end
module_function :helper
end
f = A::C1.grovel(7)
puts f
puts A::C2.grovel(25)
我正在处理遗留代码,试图避免改变太多。我不确定 我会使用相同的方法创建两个单独的类,仅作为每个类 包含一个方法,使用通用代码。我想将常用代码提取出来 只有A中的方法可以看到但仍需要调用它的方法 它的完全限定名称(“A :: helper”)。
有更好的方法吗?理想情况下,我想包装常见的 一个方法中的代码(让它仍然称之为“帮助”),可以从中调用 在类grovel方法中没有任何限定,但不容易 可用于模块A之外的代码。
感谢。
答案 0 :(得分:1)
如何创建另一个模块?
module A
module Helper
def helper(y)
y + 7
end
end
class C1
class << self
include A::Helper
def grovel(x)
return helper(x) + 3
end
end
end
class C2
class << self
include A::Helper
def grovel(x)
return helper(x) + 12
end
end
end
end
puts A::C1.grovel(7)
puts A::C2.grovel(25)
您创建A的子模块,并将其作为Mixin包含在您的类中。这样只有这些类才能访问该方法。
中看到它正常工作答案 1 :(得分:0)
Minixs非常有用,例如,当无法应用正确的继承时,类必须继承其他两个类的属性,因此您可以在此处使用继承机制:
module A
class C
def self.helper(y)
y + 7
end
end
class C1 < C
def self.grovel(x)
return self.helper(x) + 3
end
end
class C2 < C
def self.grovel(x)
return self.helper(x) + 12
end
end
end
puts A::C1.grovel(7)
puts A::C2.grovel(25)