Первый и последний элемент ruby имеет ["и"] - PullRequest
2 голосов
/ 31 марта 2020

Я пытаюсь получить массив из строки, переданной в качестве параметров, чтобы соответствовать словарю после.

Мой код:

def substrings(*args, dictionary)
  words = args.to_s.split(" ")

  puts words[0]
  puts words[1]
  puts words[2]

end


substrings("below as above", dictionary)

Результат

["below
as
above"]

Почему первый и последний элементы имеют это ["и"] ??

Надеюсь, я был ясен.

1 Ответ

6 голосов
/ 31 марта 2020

* в *args означает, что вы собираете произвольное количество аргументов в массиве args, поэтому "below as above" преобразуется в массив ["below as above"], а .to_s преобразует его в строку '["below as above]', поэтому вы получить этот странный результат.

Если вам нужен только один (первый) строковый аргумент, вы можете изменить код следующим образом:

def substrings(str, dictionary)
  words = str.split

  puts words[0]
  puts words[1]
  puts words[2]

end


substrings("below as above", dictionary)
# output:
# below
# as
# above

Или, если вы действительно хотите передать любое количество строк :

def substrings(*args, dictionary)
  words = args.map(&:split).flatten

  words.each { |word| puts word }
end


substrings("below as above", "foo is not a bar", dictionary)
# output:
# below
# as
# above
# foo
# is
# not
# a
# bar
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...