Ruby on rails 如何制作';attr#U reader';或';attr#u writer';一次为所有类变量?

Ruby on rails 如何制作';attr#U reader';或';attr#u writer';一次为所有类变量?,ruby-on-rails,ruby,class,ruby-on-rails-3,variables,Ruby On Rails,Ruby,Class,Ruby On Rails 3,Variables,我使用的是RubyonRails3,因为我已经声明了一个包含很多变量的类,所以我会一次性声明这些类变量的所有“attr_reader”或“attr_writer” 我试着 class Persone attr_reader :all def initialize(name, surname, ...) @name = name @surname = surname ... # A lot of variables! end end 但这不起作用。看看课堂:

我使用的是RubyonRails3,因为我已经声明了一个包含很多变量的类,所以我会一次性声明这些类变量的所有“attr_reader”或“attr_writer”

我试着

class Persone
  attr_reader :all

  def initialize(name, surname, ...)
    @name = name
    @surname = surname
    ... # A lot of variables!
  end
end
但这不起作用。

看看课堂:


我认为你应该使用:

attr_accesor :name, :surname, ...

def initialize(name, surname, ...)
  @name = name
  @surname = surname
  ...
end

这样,您只需在一个步骤中获得setter和getter,但仍然必须枚举所有变量名。

答案可能晚了,但晚了总比没有好:

class Persone
  INSTANCE_VARS = [:name,:surname]
  attr_reader *INSTANCE_VARS

  def initialize(*params)
    params.each_with_index do |param,index|
      instance_variable_set("@"+INSTANCE_VARS[index].to_s,param)
    end
  end
end
class Persone    
  def initialize(name, surname, ...)
    @name = name
    @surname = surname
    ... # A lot of variables!

    instance_variables.each do |var|
        eval "def #{var.to_s.sub('@', '')}; #{i}; end"
    end
  end
end

实例_变量块在Chris Wouters示例中有一个输入错误

instance_variables.each do |var|
    eval "def #{var.to_s.sub('@', '')}\n #{var}; end"
  end

我假设Persone
继承自ActiveRecord?因为您使用的是Rails,所以看起来会,但您的摘录并没有反映这一点。不,在本例中,它不会继承自ActiveRecord。
class Persone    
  def initialize(name, surname, ...)
    @name = name
    @surname = surname
    ... # A lot of variables!

    instance_variables.each do |var|
        eval "def #{var.to_s.sub('@', '')}; #{i}; end"
    end
  end
end
instance_variables.each do |var|
    eval "def #{var.to_s.sub('@', '')}\n #{var}; end"
  end