仅当字符串存在(或不是nil)时才将后缀附加到字符串

时间:2018-02-22 12:51:03

标签: ruby-on-rails ruby

我正在寻找一种简洁的方法来替代

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?

恰恰相反:当值不存在时,带后缀的字符串无意显示。

4 个答案:

答案 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 }