Ruby on rails 如何制作';attr#U reader';或';attr#u writer';一次为所有类变量?
我使用的是RubyonRails3,因为我已经声明了一个包含很多变量的类,所以我会一次性声明这些类变量的所有“attr_reader”或“attr_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 但这不起作用。看看课堂:
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