简洁的方法来设置默认值?

时间:2017-05-17 22:43:45

标签: ruby-on-rails ruby

我是Ruby on Rails的新手。有更优雅或简洁的方法吗?

foo = params[:foo].nil? ? 'default' : params[:foo]

如果param不存在,我只想分配一个默认值。我的方式似乎有点笨拙。

4 个答案:

答案 0 :(得分:3)

我喜欢:

 foo = params[:foo] || 'default'

答案 1 :(得分:2)

如果您想为一个键设置默认值,Hash#fetch就是您的答案。

如果传递了一个块,如果密钥不在params中,它将返回块的值。

params = {}
params.fetch(:foo) { 'default' } 
=> "default"

如果默认值易于计算,您也可以将此作为方法中的第二个参数:

params = {}
params.fetch(:foo, 'default')
=> "default"

如果要为整个哈希设置默认值,则应该查看#default=#default_proc。由于您的问题与params有关,因此我猜测您无法使用适当的默认值初始化哈希值。

顺便说一句,如果值设置为nil,您的方式将不会返回nil,但抓取将正确返回nil

params[:foo] = nil
params.fetch(:foo) { 'default' }
=> nil 

答案 2 :(得分:1)

较短的等价物:

foo = params[:foo].nil? ? 'default' : params[:foo]

foo = params[:foo] || 'default'

答案 3 :(得分:0)

另一种选择是使用presence方法,请检查此代码:

foo = params[:foo].presence || 'default'
  • presence检查值是否存在(即不是nil /空),如果是,则返回该值,否则返回nil
  • 如果 letf ||
  • nil会将值返回到 right

请注意,如果foo为空,此选项也会将'default'设置为params[:foo]