首页
学习
活动
专区
圈层
工具
发布

Ruby和Zero
EN

Stack Overflow用户
提问于 2011-06-17 18:40:54
回答 6查看 12K关注 0票数 15

Ruby的to_i实例中的NilClass方法返回零这一事实背后有什么科学依据?返回零或引发异常不是更合乎逻辑的吗?

EN

回答 6

Stack Overflow用户

回答已采纳

发布于 2011-06-18 01:44:15

NilClass定义#to_i的原因与定义返回[].#to_a的原因相同--它为您提供了正确类型的东西,但却给出了一种空的值。

这其实很有用。例如:

代码语言:javascript
复制
<%= big.long.expr.nil? ? "" : big.long.expr %>

变成:

代码语言:javascript
复制
<%= big.long.expr %>

好多了!(Erb正在调用#to_s,表示为“”。)和:

代码语言:javascript
复制
if how.now.brown.cow && how.now.brown.cow[0]
  how.now.brown.cow[0]
else
  0
end

变成:

代码语言:javascript
复制
how.now.brown.cow.to_a[0].to_i

当只需要表示时,就存在短的转换。长期转换是Ruby核心方法调用的转换,它们需要非常接近的内容。如果您想要类型检查,请使用它们。

这就是:

代码语言:javascript
复制
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
票数 14
EN

Stack Overflow用户

发布于 2011-06-17 19:05:28

它符合Ruby的放任哲学(例如,与Python的严格性相反):

代码语言:javascript
复制
nil.to_i #=> 0 
"".to_i #=> 0
"123hello".to_i #=> 123
"hello".to_i #=> 0

正如Zabba所指出的,您可以使用Kernel#Integer(字符串)进行严格的转换。

票数 16
EN

Stack Overflow用户

发布于 2011-06-18 01:20:17

to_i的意思是“如果可以的话,将我转换成整数”。

如果你想要“如果你非常喜欢整数,给我你的整数值,否则给一个NoMethodError",然后使用.to_int

还有一个问题是关于to_ito_int之间的区别,to_sto_str等等。如果你想让我帮你找到它,请告诉我。

票数 9
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/6390279

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档