我正在写一个这样的程序:
module Filter
def self.included?(klass)
@count = 0
end
end
class Object
include Filter
end
class Person
def get_count
puts @count
end
end
我想通过混合Filter来定义一个实例变量@count,希望所有Object都可以访问这个mixin。
然而,我的方式不起作用。
谁能告诉我如何实现这个目标?
答案 0 :(得分:2)
不要使用变量,请使用属性:
module Counter
attr_accessor :count
end
class Person
include Counter
end
person = Person.new
person.count = 50
puts person.count
此外,请勿在{{1}}中添加内容,仅包括在您的课程中。使用非通用方法对主命名空间进行污染很糟糕,并且可能导致其他类中的方法名称冲突,从而导致难以发现的错误。
只包含您认为需要的模块,而不是包含所有模块。
答案 1 :(得分:0)
但是,如果您真的希望更改Object
的每个实例,那么您可以只打开Object类并添加您要查找的特定功能: / p>
class Object
attr_accessor :count
end
...
p = Person.new
p.count = 10
puts p.count # => 10
不推荐,但可以使用(无论如何,您现在打开Object以包含模块。)