tok*_*and 15
它符合Ruby的宽容理念(与Python的严格性相反):
nil.to_i #=> 0
"".to_i #=> 0
"123hello".to_i #=> 123
"hello".to_i #=> 0
Run Code Online (Sandbox Code Playgroud)
如Zabba所述,您可以使用Kernel#Integer(string)进行严格转换.
Dig*_*oss 14
NilClass定义#to_i它定义的相同原因定义#to_a返回[].它给你一些正确的类型,但是一个空的值.
这实际上非常有用.例如:
<%= big.long.expr.nil? ? "" : big.long.expr %>
Run Code Online (Sandbox Code Playgroud)
变为:
<%= big.long.expr %>
Run Code Online (Sandbox Code Playgroud)
好多了!(Erb正在调用#to_s,对于nil,是"".)并且:
if how.now.brown.cow && how.now.brown.cow[0]
how.now.brown.cow[0]
else
0
end
Run Code Online (Sandbox Code Playgroud)
变为:
how.now.brown.cow.to_a[0].to_i
Run Code Online (Sandbox Code Playgroud)
当只需要表示时,存在短转换.长时间的转换是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
Run Code Online (Sandbox Code Playgroud)
to_i 意思是"如果可以的话,将我转换为整数".
如果你想要"如果你非常像整数,给我你的整数值,否则给出NoMethodError",然后使用.to_int.
还有,询问有关的区别另一个问题to_i和to_int,to_s对to_str等,让我知道,如果你想我帮您找到它.
协议to_i说你必须返回一个Integer,你不能提出异常.您的两条建议都至少违反了其中一条规则.所以,不,那些不仅不合逻辑,它们只是无效.
但请注意,nil 没有回应to_int.如果确实做出了回应to_int,那确实会"不合逻辑".
如果你碰巧在 Rails 中,那么你可以使用try:
nil.to_i # => 0
nil.try :to_i # => nil
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
8326 次 |
| 最近记录: |