如何动态设置而无需全部编写相同的代码.
现在代码看起来像这样:
def initialize(keywords: keywords, title: title, url: url, adsetting: adsetting)
self.keywords = keywords
self.title = title
self.url = url
self.adsetting = adsetting
end
Run Code Online (Sandbox Code Playgroud)
如果列表变长,这很快就会失控.
使用ruby 1.9,我只是将哈希传递给方法.像这样:
def initialize(args)
args.each do |k,v|
instance_variable_set("@#{k}", v) unless v.nil?
end
end
Run Code Online (Sandbox Code Playgroud)
但我宁愿使用Ruby 2.0关键字参数.可以实现类似的东西吗?
def initialize(keywords: keywords, title: title, url: url, adsetting: adsetting)
args.each do |k,v|
instance_variable_set("@#{k}", v) unless v.nil?
end
end
Run Code Online (Sandbox Code Playgroud)
saw*_*awa 16
def initialize(keywords: nil, title: nil, url: nil, adsetting: nil)
local_variables.each do |k|
v = eval(k.to_s)
instance_variable_set("@#{k}", v) unless v.nil?
end
end
Run Code Online (Sandbox Code Playgroud)
或遵循John Ledbetter和Cary Swoveland的建议:
def initialize(keywords: nil, title: nil, url: nil, adsetting: nil)
method(__method__).parameters.each do |type, k|
next unless type == :key
v = eval(k.to_s)
instance_variable_set("@#{k}", v) unless v.nil?
end
end
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
5291 次 |
最近记录: |