【发布时间】:2010-02-09 19:15:41
【问题描述】:
我正在尝试在一个模块中定义一个静态变量和方法,这些变量和方法将被众多类扩展/使用。下面的例子演示:
module Ammunition
def self.included(base)
base.class_eval("@@ammo = [bullets]")
end
def unload
p @@ammo #<-- doesn't work
end
end
class Tank
include Ammunition
@@a += [shells]
end
class Airplane
include Ammunition
@@a += [missiles, photon_torpedoes]
end
Tank.new.unload
Airplane.new.unload
这不起作用,因为 ammunition 不知道如何在类的上下文中评估 @@ammo 出于某种原因(我最初认为该模块的行为就像一个包含文件)。我必须将“卸载”复制到每个类,我现在正在这样做,但我想把它干掉 b/c 我还有许多其他方法可以添加到模块中。
建议?合理的解决方案是在类而不是模块的上下文中评估“卸载”(但是如何在 Ruby 中做到这一点?)
谢谢!
【问题讨论】:
-
1.为什么使用 Ruby on Rails 标签? 2. 你的模块被称为
ammunition(Ammunition?),但你后来被称为include Packagable- 这根本不在这里。 3. 你的代码试图做什么并不是很清楚。描述有所帮助,但并非完全有帮助。 -
感谢 Squeegy - 您设法回答了我令人费解且措辞/编辑不佳的问题(抱歉没有更好地措辞)!我的实际问题是我试图编写一个用于 json 的模块,该模块将一堆模型与多态关联捆绑在一起。我最终按照你的方式设置了 attr_reader。
标签: ruby-on-rails ruby