如何解决“在'+':没有从整数到字符串的隐式转换”?

时间:2019-07-11 05:13:55

标签: ruby notepad++

这里是新用户,所以我对此帖子的格式设置不正确表示歉意。

我正在学习如何编写Ruby,并且正在使用Notepad ++。我正在处理的文件之一是 todemu.rb ,它是一个告诉您有关字符的详细信息名为Todemu的文件。

我添加的方法之一是:

todemu.age = "27"

显示年龄。然后,我将其放入变量中,这样我可以更轻松地将其插入句子中。

x = todemu.age
puts "How old is Todemu?"
puts "Todemu is" + " " + x.to_s + " " + "years old."

显示我想要的输出, Todemu已经27岁了。

然后,我尝试通过使用以下代码来增加年龄的值:

x += 1

但是,Notepad ++中的控制台(我为此使用了 NppExec 插件)显示了此错误: todemudan.rb:26:in '+': No implicit conversion of Integer into String (TypeError)

为什么在错误中显示符号,我该如何解决?

此外,我已经研究了Stack Overflow中大多数措辞相似的问题,但似乎都无法纠正我的问题(感谢iGian提醒我)。

在此先感谢您的感谢,

2 个答案:

答案 0 :(得分:4)

您将年龄保留在字符串中,并尝试对整数使用“ +”运算符。您可能应该将年龄存储为整数,以便可以使用“ +”将其添加。如果无法做到这一点,则可以在添加之前始终使用.to_i进行投射,例如:

age = x.to_i+1

我建议您阅读一些涉及Ruby类型系统的教程,例如:http://zetcode.com/lang/rubytutorial/datatypes/

Ruby的类型系统迫使您在这种情况下要注意类型,而不是例如PHP的+运算符,如果两个参数之一是字符串而另一个参数是整数(不会引发错误),它将连接在一起

整数添加

i = 1
i + 1 # => 2

字符串+整数

i = "1"
i + 1 # => error
i.to_i + 1 # => 2
i + "1" # => 11

插值

i = 27
puts "My age is #{i}" # => My age is 27

答案 1 :(得分:0)

您可以在代表数字的字符串上调用.to_i方法。 .to_i会将字符串强制转换为整数,而.to_f会将其转换为浮点型。但是请确保字符串代表数字。如果调用'number'.to_i,它将返回零