неявное преобразование String в Integer, простая функция ruby ​​не работает - PullRequest
0 голосов
/ 11 января 2019

Когда я запускаю этот код, я получаю typeError, но когда я делаю это вручную в IRB, кажется, все работает нормально. Я полагаю, что проблема лежит где-то в моем заявлении IF, но я не знаю, как ее исправить.

numerals = ["a", "b", "c", "d", "e", "f", "g", "h", "i", "j", "k", "l", "m", "n", "o", "p", "q", "r", "s", "t", "u", "v", "w", "x", "y", "z"]
def convertToNumbers(string)
  arr = string.downcase.split('')
  new_array = []
  arr.each do |i|
      if (arr[i] =~ [a-z])
          numValue = numerals.index(arr[i]).to_s
          new_array.push(numValue)
      end
  end
end

Ответы [ 2 ]

0 голосов
/ 11 января 2019

Несколько вопросов. Как указал Тайлер внутри цикла, вы по-прежнему ссылаетесь на arr, когда смотрите, что нужно использовать только i. Кроме того, проблема с регулярным выражением, на которую указал Макс, также действительна. Функция также будет возвращать arr, а не массив new_array, так как это результат вывода цикла for.

Я сделал несколько модификаций.

def convertToNumbers(string)
  numerals = ["a", "b", "c", "d", "e", "f", "g", "h", "i", "j", "k", "l", "m", "n", "o", "p", "q", "r", "s", "t", "u", "v", "w", "x", "y", "z"]
  arr = string.downcase.split('')
  new_array = []
  arr.each do |i|
      if (i =~ /[a-z]/)
          numValue = numerals.index(i).to_s
          new_array.push(numValue)
      end
  end
  new_array.join
end

puts convertToNumbers('abcd');

который печатает '0123'

0 голосов
/ 11 января 2019

Вы, вероятно, имели в виду

arr[i] =~ /[a-z]/

, который соответствует символам от a до z. Что ты написал

arr[i] =~ [a-z]

создает массив и пытается сравнить его с помощью оператора сравнения регулярных выражений, что является ошибкой типа (при условии, что определены переменные a и z).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...