如何编写initalizer()方法来形成实例变量(空或其他),然后遍历一组args来设置实例变量?
这就是我的想法:
def initialize(*p)
@sid = "123asdf654"
@token = "abc123"
@bert = "1192875119"
@me = "4165551212"
@media_url = ""
@message = ""
args.each do |k,v|
instance_variable_set("@#{k}", v) unless v.nil?
end
end
我希望能够设置已知的实例变量(如此处所示),然后遍历args并更新所选实例变量的值,或者创建新的变量。
答案 0 :(得分:5)
如果您要这样做,您需要接受的不是您指定的参数数组( varargs 样式),而是选项哈希或新< em> keyword-args 样式选项。
经典方法:
def initialize(attributes = nil)
attributes and attributes.each do |k,v|
instance_variable_set("@#{k}", v) unless v.nil?
end
end
新的关键字参数方法:
def initialize(**options)
attributes.each do |k,v|
instance_variable_set("@#{k}", v) unless v.nil?
end
end
您也可以将OpenStruct子类化为免费获得此类行为。
请记住,新的选项风格可能是这两种方法的良好组合:
def initialize(sid: '123', token: '...', ...)
@sid = sid
@token = token
# ...
end
您可以为命名关键字参数指定默认值。