*
в *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