Как мне исправить "в '+': нет неявного преобразования из целого числа в строку"? - PullRequest
0 голосов
/ 11 июля 2019

Новый пользователь здесь, поэтому я извиняюсь, если это сообщение не было правильно отформатировано.

Я учусь писать на Ruby и использую Notepad ++.Один из файлов, над которыми я работаю, это todemu.rb , который представляет собой файл, который сообщает вам подробности о персонаже с именем Todemu.

Один из методовЯ добавил:

todemu.age = "27"

, чтобы показать возраст.Затем я помещаю это в переменную, чтобы мне было легче вставить это в предложение.

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

, который отображает желаемый результат, Тодему 27 лет.

Затем я попытался увеличить значение возраста, используя этот бит кода:

x += 1

Тем не менее, консоль в Notepad ++ (я использовал NppExec плагин для этого) показал эту ошибку: todemudan.rb:26:in '+': No implicit conversion of Integer into String (TypeError)

Почему он показывает знак плюс в ошибке, и как я могу это исправить?

Кроме того,Я рассмотрел большинство похожих вопросов в Переполнении стека, но ни один из них, похоже, не исправляет мою проблему ( спасибо iGian за напоминание ).

Заранее спасибо, и я прошу прощения заДлина поста.

Ответы [ 2 ]

4 голосов
/ 11 июля 2019

Вы сохраняете возраст в строке и пытаетесь применить оператор «+» с целым числом.Вы, вероятно, должны хранить возраст как целое число, чтобы вы могли добавить к нему, используя «+».Если это невозможно, вы всегда можете выполнить приведение с использованием .to_i перед добавлением, например:

age = x.to_i+1

Я бы посоветовал пройтись по некоторым учебникам, которые охватывают систему типов Ruby, например: http://zetcode.com/lang/rubytutorial/datatypes/

Система типов Ruby заставляет вас обращать внимание на ваши типы в таких случаях, а не на оператор PHP +, который объединяет, если один из параметров является строкой, а другой - целым числом (без выдачи ошибки)

Integerдобавление

i = 1
i + 1 # => 2

String + Integer

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

Интерполяция

i = 27
puts "My age is #{i}" # => My age is 27
0 голосов
/ 11 июля 2019

Вы можете вызвать метод .to_i для строки, которая представляет число..to_i приведет строку к целому числу, а .to_f преобразует ее в число с плавающей точкой.Но убедитесь, что строка представляет число.Если вы позвоните 'number'.to_i, он вернет ноль

...