跨多个类的attr_accessor?

时间:2013-08-08 14:07:34

标签: ruby class module attr-accessor

我有一个包含许多不同类的单个模块(分成单独的文件)。每个类都有相同的attr_accessor集,那么如何重用它而不必重复attr_accessor块?

我目前在做什么......

# dog.rb
module Animals
   class Dog
      attr_accessor :name, :color, :age 
   end
end

# cat.rb
module Animals
   class Cat
      attr_accessor :name, :color, :age 
   end
end

# rodent.rb
module Animals
   class Rodent
      attr_accessor :name, :color, :age 
   end
end

我试着这样做没有运气......

# animals.rb
module Animals
   attr_accessor :name, :color, :age 
end

我需要直接在我的应用程序中访问这些模块(它是一个Rails应用程序)。例如:Animals::Dog.give_water

1 个答案:

答案 0 :(得分:7)

您对模块Animal的使用是错误的。将它用作命名空间对您的目的没有任何好处。你应该包括它们。

module Animals
  attr_accessor :name, :color, :age 
end

class Dog
  include Animals
end

class Cat
  include Animals
end

class Rodent
  include Animals
end

或者,您可以将Animal转换为类,并从中进行子类化。

class Animals
  attr_accessor :name, :color, :age 
end

class Dog < Animals
end

class Cat < Animals
end

class Rodent < Animals
end

顺便说一下,一个类已经暗示它可能有多个实例,因此为类创建一个复数名称是多余的。你也不一致。