我发现自己对构造函数使用了哈希参数,特别是在编写用于配置的DSL或最终用户将要暴露的其他API时.我最终做的事情如下:
class Example
PROPERTIES = [:name, :age]
PROPERTIES.each { |p| attr_reader p }
def initialize(args)
PROPERTIES.each do |p|
self.instance_variable_set "@#{p}", args[p] if not args[p].nil?
end
end
end
Run Code Online (Sandbox Code Playgroud)
有没有更惯用的方法来实现这一目标?抛弃常数和符号到字符串转换似乎特别令人震惊.