Ruby on rails 在ruby中,如何编写item.nil?无:项目编号至
必须有更好的方法来编写Ruby on rails 在ruby中,如何编写item.nil?无:项目编号至,ruby-on-rails,ruby,Ruby On Rails,Ruby,必须有更好的方法来编写item.nil?无:item.id.to\u。有人知道吗?是的,有可能: item && item.id.to_s 例如: a = 23 a && a.to_s # => "23" a = nil a && a.to_s # => nil 您还可以执行以下操作: item.id.to_s if item 我会使用,除非: item.id.to_s unless item.nil? 如果条件为fals
item.nil?无:item.id.to\u
。有人知道吗?是的,有可能:
item && item.id.to_s
例如:
a = 23
a && a.to_s # => "23"
a = nil
a && a.to_s # => nil
您还可以执行以下操作:
item.id.to_s if item
我会使用
,除非
:
item.id.to_s unless item.nil?
如果条件为false,则此表达式的计算结果为nil
,因为您有“RubyonRails标签”,在rails上可以执行项。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”
零
编辑:到目前为止不是最好的方式,请参见下面的评论 在下面的猴子补丁之后,nil.id.to_将开始返回nil
class NilClass
def id
self
end
def to_s
self
end
end
第三次尝试…@Gumbo是的。。的确……)如果
a
与a=false
@Gumbo错误地相似,那么这可能不起作用。看着代码,我确信项
是一个对象,就像上面的OP称为方法id
一样。因此不可能出现false
值,nil
或真值。。当然。item是从数据库加载的RoR对象,所以我当然希望它不是错误的。也许有更好的方法来解决这个问题。你想干什么?好奇。为什么除非
显式调用nil?
只是更明显地说明发生了什么?@O-I希望OP也能更准确地使用它。我是一个粉丝。这很有道理,我喜欢显式的。零?如果你使用Rails,我真的很喜欢这个。仍然允许方法链接。很好,努雷廷!太棒了,我不知道try
方法,谢谢。@kdeisz-try方法像明火净化条件(+1表示醉酒?)一样照亮了我的代码。这看起来非常危险/测试起来绝对可怕。所以nil.to_开始返回nil而不是“”?如果项目评估为false,这将不起作用,但我明白你的意思。