Опитвам се да върна две струни в масив в отделни думи:
list = ["hello my name is ryan", "hole me llamo"]
def splitter(inp)
inp.each.split(" ")
end
print splitter(list)
Това се връща:
ruby splitter.rb
splitter.rb:4:in `splitter": undefined method `strsplit" for # <Enumerator: ["hello my name is ryan", "hole me llamo"]:each> (NoMethodError)
from splitter.rb:7:in `<main>"
Тя работи, ако не използвам .each
и употреба inp(0)
или inp(1)
но само един низ се връща.
Как мога да получа и двете струни да бъдат върнати?
Отговори:
2 за отговор № 1Ето едно, което трябва да направите:
def splitter(inp)
inp.flat_map(&:split)
end
splitter list
# => ["hello", "my", "name", "is", "ryan", "hole", "me", "llamo"]
Във вашия код inp.each
беше всъщност метод, наречен като Array#each
, които без блок дава Enumerator
, И String#spilt
съществува, но няма подобен метод Enumerator#split
, Ето защо NoMethod грешката се взривява.
И ако искате масив от думи за всеки отделен низ, тогава
def splitter(inp)
inp.map(&:split)
end
splitter list
# => [["hello", "my", "name", "is", "ryan"], ["hole", "me", "llamo"]]
0 за отговор № 2
Ако разбера правилно въпроса, това е просто:
list = ["hello my name is ryan", "hole me llamo"]
list.join(" ").split
#=> ["hello", "my", "name", "is", "ryan", "hole", "me", "llamo"]