我有一个initialize
方法,它接受一个哈希值来设置一些实例变量。基本上,这就是我想做的事情:
class Ad
DEFAULT_PAGE = 'index'.freeze
DEFAULT_CHANNEL = 'general'.freeze
DEFAULT_AREA = 'general'.freeze
attr_accessor :page, :area, :channel
def initialize args={}
@page = args[:page] || DEFAULT_PAGE
@area = args[:area] || DEFAULT_AREA
@channel = args[:channel] || DEFAULT_CHANNEL
end
# ...
end
我看到一个技巧可以允许动态设置实例变量,但我不确定如何同时包含默认值...
def initialize args={}
args.each do |attr,val|
instance_variable_set("@#{attr}", val) unless val.nil?
end
end
我能动态地引用常量吗?或者有更好的方法来完成这种事情吗?
......我也意识到attr_accessor
变量可以单独设置。但我只想这样做。 :)
val
...感谢指出。 - Erik J