我有很多实例方法,它们都共享相同的实例变量。由于这个类变得很大,我将这些方法分成大约 50 个模块。然后剩下的课程包括所有这 50 个模块。
我最终得到了一个令人难以置信的丑陋代码,其中充满了诸如“module_name_method_name”之类的实例方法,以避免方法名称的冲突。问题是每个模块可能具有相似(相似,不同)的功能(进而相似的方法名称)。
我当前的代码如下所示:
模块:
module Toyota
def toyota_method1;@foo...;end
def toyota_method2;@foo...;end
....
end
module Ford
def ford_method1;@foo...;end
def ford_method2;@foo...;end
....
end
.... 大约 50 个这样的模块
class Cars
include Toyota
include Ford
include ...
def foo
@foo = "bar"
@bar = "foo"
...
toyota_method1
ford_method2
toyota_method2
...
end
end
我怎样才能更好地设计我的代码?最重要的是所有实例方法都需要共享相同的实例变量……或者至少以某种方式可以访问相同的数据!
编辑:我自己想出了这个:
class Toyota
attr_accessor :foo
def method1
puts @foo
end
end
class Ford
attr_accessor :foo
def method1
puts @foo
end
end
class Cars
def foo
@foo = "bar"
toyota = Toyota.new
toyota.foo = @foo
toyota.method1
ford = Ford.new
ford.foo = @foo
ford.method1
end
end
cars = Cars.new
cars.foo
事实上,它解决了丑陋的方法名称问题,但现在我正在处理新问题:变量 @foo 可能非常大,它会将自身复制 50 次(或更多)到内存中(因为我有 50 个这样的类)。
还有其他解决方案吗?