Ruby - неопределенная локальная переменная - PullRequest
1 голос
/ 29 января 2020

Я не совсем уверен, чего мне не хватает. Спасибо за помощь в продвижении!

# Example:
# encoded_string = "m1i1s2i1s2i1p2i1"
# decoded_string = decode(encoded_string)
# decoded_string # => "mississippi"

# decode("f1o2d1")
# "food"

def decode(string)
  new_str = ""
  i = 0
  while i < string.length
    letter = string[i]
    num = string[i + 1]
    num.times {new_str += letter}
    i += 2
  end
  return new_str
end

Ответы [ 2 ]

1 голос
/ 29 января 2020

Проблема здесь:

num = string[i + 1]
num.times {new_str += letter}

string[i + 1] возвращает строку - в этом случае один символ, который оказывается числом, например "2". Однако times - это метод, принадлежащий классу Integer . Чтобы использовать times для этого числа, вам необходимо сначала преобразовать его в целое число, используя to_i:

num = string[i + 1].to_i

С этим изменением ваш код работает отлично: https://repl.it/@jrunning / CriminalGracefulRefactoring

1 голос
/ 29 января 2020

Вы определили функцию, но вам нужно ее вызвать, иначе ничего не произойдет.

Как в примере:

decode("f1o2d1")

Однако в вашем коде есть ошибка, когда вы сделать это.

Попробуйте использовать string.chars, чтобы получить символы, а затем each_slice(2), чтобы вытащить пары. Например:

string.chars.each_slice(2) do |char, count|
  count = count.to_i

  # ... Do stuff with this
end

Еще один прием в Ruby - если вы хотите повторить строку, умножьте ее:

'a' + 'b' * 2 + 'a'
# => "abba"
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...