`nil`.to_i #=> 0`, `"".to_i #=> 0` `nil`.to_f #=> 0.0`, `"" .to_f #=> 0.0`

Use case for `nil`.to_i #=> 0`, `"".to_i #=> 0` `nil`.to_f #=> 0.0`, `"".to_f #=> 0.0`

我觉得如果 "".to_i"".to_fnil 或抛出异常会很自然,定义 nil.to_i 对我来说意义不大或 nil.to_f.

nil.to_i #=> 0"".to_i #=> 0nil.to_f #=> 0.0"".to_f #=> 0.0 的用例是什么?

两种情况:

  1. 起始值。

    @count = @count.to_i.next
    

    相对于

    @count = 0
    @count += 1
    
  2. 转换方便。

    您经常会得到包含 return 一些值的集合,这些值是 nil。通常,您想要删除它们或将它们计为默认值。

    假设您有一种方法可以计算每个 SO 用户评分最高 post 的平均分数。如果用户根本没有 post,User#highest_rated 将 return nil

    users.map{ |user| user.highest_rated.to_i }.reduce(:+) / users.size
    

    这不是一个完美的例子,但它一直在日常转换中发生。


为什么不引发异常或 return nil

Ruby 超出可用性。必须在所有地方检查 nil 值看起来有点笨拙。事实上,在很多情况下,当我使用这些操作时,正是为了确保 nil 值被转换为它们的默认值。

此外,人们期望 to_i(例如)将 return 是一个整数。返回 nil 将是一个轻微的 wtf 时刻。