我是Ruby on Rails的新手。有更优雅或简洁的方法吗?
foo = params[:foo].nil? ? 'default' : params[:foo]
如果param不存在,我只想分配一个默认值。我的方式似乎有点笨拙。
答案 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
。||
,nil
会将值返回到 right 。 请注意,如果foo
为空,此选项也会将'default'
设置为params[:foo]
。