Ruby “nil”的用例。to#i=>;0`,`"&引用;。to_i#=>;0``nil`。至#f#=>;0.0`,`"&引用;。to_f#=>;0.0`
我觉得如果Ruby “nil”的用例。to#i=>;0`,`"&引用;。to_i#=>;0``nil`。至#f#=>;0.0`,`"&引用;。to_f#=>;0.0`,ruby,null,integer,Ruby,Null,Integer,我觉得如果“.to_I和”.to_f是nil或引发了一个异常,那么这将是很自然的,并且对我来说定义nil.to_I或nil.to_f没有多大意义 nil.to#i#=>0,“to#i#=>0,nil.to#f=>0.0和”。to#f#=>0.0?有两种情况: 起始值 @count = @count.to_i.next 相对于 @count = 0 @count += 1 转换带来的便利 通常情况下,您会收到带有一些值的集合,这些值是nil。通常,您希望删除这些值或将其作为默认值计算 假设您
“.to_I
和”.to_f
是nil
或引发了一个异常,那么这将是很自然的,并且对我来说定义nil.to_I
或nil.to_f
没有多大意义
nil.to#i#=>0
,“to#i#=>0
,nil.to#f=>0.0
和”。to#f#=>0.0
?有两种情况:
@count = @count.to_i.next
相对于
@count = 0
@count += 1
nil
。通常,您希望删除这些值或将其作为默认值计算
假设您有一种方法,可以计算每个SO用户的最高评分帖子的平均分数User#highest#u rated
将返回nil
如果用户根本没有帖子:
users.map{ |user| user.highest_rated.to_i }.reduce(:+) / users.size
这不是一个完美的例子,但它总是发生在日常转换中为什么不引发异常或返回
nil
Ruby在可用性方面超过了其他技术。到处检查nil
值看起来有点笨拙。事实上,在很多情况下,当我使用这些操作时,就是要确保将nil
值转换为它们的默认对应值
此外,还期望
to_i
(例如)将返回一个整数。返回nil
将是一个轻微的wtf时刻。@quetzalcatl JavaScript与Ruby几乎同时出现,我认为前者不会影响后者。它可能来自其他一些语言,比如C或Perl。。我一直认为鲁比年轻几岁。看起来两个朗都是1995年左右出生的。谢谢你指出@CarySwoveland在这种情况下,我会提前从a
中删除”
或nil
。这在语义上似乎更好。嗯。。这个问题不是只有松本幸弘才能回答吗所以你想在你的代码中乱扔一些nil?
检查,而不是说x.to\u i
?我认为您应该将此讨论带到Ruby邮件列表中。在您的第一个示例中,您使用to_I
只是为了将nil
转换为0
,这看起来并不优雅,也不可读。我宁愿将其写成@count=(@count | | 0)。下一个。关于你的第二个例子,如果用户没有得分依据的帖子,那么我认为在计算平均值时排除这些用户更自然。或者,这样的用户从一开始就应该有分数0
。@sawa“您使用来实现i
,只是为了将nil
变成0
,这看起来并不优雅”。当你从一个前提开始时,你只会看到一种方法。对我来说,这样的链接方法看起来比括号中的两个值和|
更优雅。我理解的一个设计原则是,最好尽早将任何不规则性标准化。如果有一个数组有一些不规则的值,我宁愿在早期阶段使用compact
或nil?
检查,而不是依赖to_I
来防止以后的错误。@sawa,但是如果这些值在某些情况下是必需的,而在其他情况下是垃圾值,该怎么办呢。您不能删除底部的nil
值。另外,正如我所说的,nil
检查的需要通常不是来自于从db或给定的API调用中得到的东西,而是来自转换。当您通过2-3个map
s数组/哈希时,具有nil
值的情况并不少见。这样做只会提供更好的可用性。