ruby – 清除分配值的方法,除非为空

如果设置了源值,我经常需要分配一个变量.到目前为止,我这样做了:

filters[:red] = params[:search][:red] unless params[:search][:red].nil?

这有效,但看起来有点笨拙.必须有更干的方法来获得这个结果.

有什么建议?

最好的祝福.
AsbjørnMorell.

最佳答案 如果你发现自己做了很多这些,你可以写一个小帮手方法:

def set_unless_nil(hsh, key, val)
  hsh[key] = val unless val.nil?
end

然后:

set_unless_nil filters, :red, params[:search][:red]

如果源和目标哈希中的键经常相同,您可以写:

def copy_key_unless_nil(src_hash, key, dest_hash)
  dest_hash[key] = src_hash[key] unless src_hash[key].nil?
end

然后:

copy_key_unless_nil params[:search], :red, filters

或者,您可以将值设置为Hash,然后在最后整理散列以删除所有具有nil值的键:

filters.delete_if { |k, v| v.nil? }
点赞