Ruby的to_i实例中的NilClass方法返回零这一事实背后有什么科学依据?返回零或引发异常不是更合乎逻辑的吗?
发布于 2011-06-18 01:44:15
NilClass定义#to_i的原因与定义返回[].的#to_a的原因相同--它为您提供了正确类型的东西,但却给出了一种空的值。
这其实很有用。例如:
<%= big.long.expr.nil? ? "" : big.long.expr %>变成:
<%= big.long.expr %>好多了!(Erb正在调用#to_s,表示为“”。)和:
if how.now.brown.cow && how.now.brown.cow[0]
how.now.brown.cow[0]
else
0
end变成:
how.now.brown.cow.to_a[0].to_i当只需要表示时,就存在短的转换。长期转换是Ruby核心方法调用的转换,它们需要非常接近的内容。如果您想要类型检查,请使用它们。
这就是:
thing.to_int # only works when almost Integer already. NilClass throws NoMethodError
thing.to_i # this works for anything that cares to define a conversion发布于 2011-06-17 19:05:28
它符合Ruby的放任哲学(例如,与Python的严格性相反):
nil.to_i #=> 0
"".to_i #=> 0
"123hello".to_i #=> 123
"hello".to_i #=> 0正如Zabba所指出的,您可以使用Kernel#Integer(字符串)进行严格的转换。
发布于 2011-06-18 01:20:17
to_i的意思是“如果可以的话,将我转换成整数”。
如果你想要“如果你非常喜欢整数,给我你的整数值,否则给一个NoMethodError",然后使用.to_int。
还有一个问题是关于to_i和to_int之间的区别,to_s和to_str等等。如果你想让我帮你找到它,请告诉我。
https://stackoverflow.com/questions/6390279
复制相似问题