首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为什么string + fixnum加法会产生强制错误?

为什么string + fixnum加法会产生强制错误?
EN

Stack Overflow用户
提问于 2009-10-12 06:01:57
回答 4查看 4.5K关注 0票数 3

为什么ruby加法不能强制给定的字符串为fixnum,反之亦然?

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

回答 4

Stack Overflow用户

回答已采纳

发布于 2009-10-12 06:05:25

因为ruby不知道是将字符串转换为int,还是将int转换为string。例如,在java中,1 + "3""13"。Ruby喜欢抛出一个错误,这样用户就可以决定是to_s一个操作数还是to_i另一个操作数,而不是自动做错误的事情。

票数 10
EN

Stack Overflow用户

发布于 2009-10-12 06:05:39

它会显示一个错误,因为ruby不知道你想要什么。String + fixnum是一个模棱两可的语句。这可能意味着您想要将字符串和数字的int值相加,或者将int和字符串的字符串值相加。例如:

代码语言:javascript
复制
str = "5"
num =  3

puts str.to_i + num
=> 8

puts str + num.to_s
=> 53

ruby只是抛出了一个异常,而不是猜测你想要哪一个。

票数 5
EN

Stack Overflow用户

发布于 2009-10-12 06:04:52

您需要将变量设置回自身,因为执行.to_i会返回一个整数值,但不会修改原始对象。

代码语言:javascript
复制
>> string = "3"
=> "3"
>> string.class
=> String
>> string.to_i
=> 3
>> string
=> "3"
>> string.class
=> String
>> string = string.to_i
=> 3
>> string.class
=> Fixnum
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1552950

复制
相关文章

相似问题

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