如何在将hash作为参数传递给ruby方法时设置默认值?

时间:2018-02-20 10:05:16

标签: ruby

有没有更好的方法可以在下面的红宝石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)

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"}