为什么string + fixnum add会产生强制错误?

Ale*_*kov 3 ruby

为什么红宝石添加不能强制给定字符串到fixnum和副verca?

irb>fixnum = 1
=> 1
irb> fixnum.class
=> Fixnum
irb> string = "3"
=> "3"
irb> string.class
=> String
irb> string.to_i
=> 3
irb> fixnum + string
TypeError: String can't be coerced into Fixnum
    from (irb):96:in `+'
    from (irb):96
    from :0
irb(main):097:0> 
Run Code Online (Sandbox Code Playgroud)

sep*_*p2k 10

因为ruby不知道您是要将字符串转换为int还是将int转换为字符串.在例如java 1 + "3""13".Ruby更喜欢引发错误,以便用户可以决定是对to_s一个操作数还是另一个操作数to_i,而不是自动做错事.


Har*_*tum 5

它吐出错误,因为红宝石不知道你想要什么.String + fixnum是一个含糊不清的语句.它可能意味着您要添加字符串的int值和数字,或者int和字符串的字符串值.例如:

str = "5"
num =  3

puts str.to_i + num
=> 8

puts str + num.to_s
=> 53
Run Code Online (Sandbox Code Playgroud)

而不是猜测你想要的那些,ruby只是抛出异常.