在红宝石中,你怎么写item.nil? ? nil:item.id.to_s

时间:2013-12-27 18:01:48

标签: ruby-on-rails ruby

必须有更好的方法来编写item.nil? ? nil : item.id.to_s。有人知道吗?

5 个答案:

答案 0 :(得分:4)

是的,有可能:

   item && item.id.to_s

示例:

a = 23
a && a.to_s # => "23"
a = nil
a && a.to_s # => nil

答案 1 :(得分:2)

您还可以执行以下操作:

item.id.to_s if item

答案 2 :(得分:2)

我会使用unless

item.id.to_s unless item.nil?

我的情况是条件为假,此表达式的计算结果为nil

答案 3 :(得分:2)

由于你有“ruby-on-rails标签”,你可以在轨道上item.try(:id).try(:to_s) 这是一个例子

require 'active_support/core_ext/object/try'
class Item
  attr_accessor :id
end

item= Item.new
item.id= 42
p item.try(:id).try(:to_s)
item= nil
p item.try(:id).try(:to_s)
  
    

“42”

         

  

答案 4 :(得分:-1)

编辑:目前还不是最好的方式,请参阅以下评论。

在下面的猴子补丁后,nil.id.to_s将开始返回nil。

class NilClass
    def id
            self
    end
    def to_s
            self
    end
end