有没有更好的方法可以在下面的红宝石hash
中设置method
参数的默认值?
def sent_email(args)
args[:file_type] = 'html' if args[:file_type].nil?
args[:css_tag] = 'title' if args[:css_tag].nil?
args[:occurrence] = 'last' if args[:occurrence].nil?
end
我想构建这样的method
,当没有传递参数时,它应该采用hash的默认值。
如果在没有参数的情况下调用此方法,则不应该给出以下错误。
1.9.3-p0 :040 > sent_email
ArgumentError: wrong number of arguments (0 for 1)
答案 0 :(得分:3)
它更好吗?
args[:file_type] ||= 'html'
> args = {file_type: 'html', css_tag: 'title'}
# => {:file_type=>"html", :css_tag=>"title"}
> args[:file_type] ||= 'last'
# => "html"
> args[:occurence] ||= 'last'
# => "last"
> args
# => {:file_type=>"html", :css_tag=>"title", :occurence=>"last"}
修改强>
DEFAULTS = {file_type: "html", css_tag: "title", occurence: "last"}
args = {}
others = {file_type: "xml", css_tag: "h1"}
DEFAULTS.merge(args) # => {:file_type=>"html", :css_tag=>"title", :occurence=>"last"}
DEFAULTS.merge(others) # => {:file_type=>"xml", :css_tag=>"h1", :occurence=>"last"}