我正在寻找一种简洁的方法来替代
value = if my_var.present? # or .nil? I dont care
"#{my_var} %"
end
简明至少意味着没有使用if语句而且只写了一次变量。
有点像这个问题how to append a string to a variable that either exists or not?
恰恰相反:当值不存在时,带后缀的字符串无意显示。
答案 0 :(得分:4)
string.presence&.concat('suffix')
如果您只关心nil
而不是整体存在,您可以简化它:
string&.concat('suffix')
如果你不想改变原始值,你可以做一些有点神秘的事情:
string&.+('suffix')
答案 1 :(得分:4)
好老try
:
'foo'.try(:+, ' %') #=> "foo %"
nil.try(:+, ' %') #=> nil
或用块:
'foo'.try { |s| "#{s} %" } #=> "foo %"
nil.try { |s| "#{s} %" } #=> nil
为了处理空白字符串,您只需添加presence
:
' '.presence.try { |s| "#{s} %" } #=> nil
答案 2 :(得分:2)
此外:
value = my_var && "#{my_var} %"
答案 3 :(得分:0)
value = my_var.dup.presence.tap { |s| s << " %" if s }