if/else/end
它们在语句中使用时是否相同?你平常都做什么?我想知道是否存在任何细微的差异或边缘情况,object
并且!object.nil?
会做出不同的反应。
问问题
40114 次
5 回答
33
有区别。例如:
false.nil?
# => false
所以:
if !false.nil?
'foo'
end
# => "foo"
if false
'foo'
end
# => nil
正如@tokland 所建议的,在大多数情况下,使用!obj.nil?
构造是不必要的。
于 2013-08-05T14:33:45.850 回答
14
只有一种情况,在布尔上下文!object.nil?
中object
评估不同的结果,那就是 if object
is false
。在所有其他情况下,结果是相同的。
有了这个,我想我们可以回答你真正的问题(即:有没有我必须使用的情况,if !object.nil?
而不仅仅是if object
在防止object
被 nil 时使用?):
if object
不,如果您想检查,您可以随时使用nil
.
于 2015-05-28T21:29:09.927 回答
9
于 2013-08-05T14:35:17.947 回答
2
出色地。将与ifif object
表现不同。if !object.nil?
object=false
就是这样。
于 2013-08-05T14:33:59.037 回答
1
对象可以覆盖nil?
,但它们不能是错误的,除非它们是 nil 或 false。我个人使用nil?
ActiveSupport present?
,以便保持这种灵活性。我也觉得它读起来好一点。
于 2013-08-05T14:35:24.703 回答