Это в основном то же, что и ответ steenslag, но вы также можете сделать это в одной строке, например:
puts "exercise #4 - print only first"
full_names = ["Alice Smith", "Bob Evans", "Roy Rogers"]
full_names.each { |name| puts name.split.first }
или
full_names.each { |name| puts name.split[0] }
Причина, по которой вы получили ошибку undefined method: first
- это то, что first
- это метод для классов Enumerable и Array. См. https://rubyapi.org/2.7/o/array#method -i-first
После того, как вы split
строки (в данном случае имена, разделенные пробелом), вы превращаете каждую из них в отдельный массив . Итак, "Alice Smith".split => ["Alice", "Smith"]
. Затем вы можете получить доступ к первому элементу этого массива с помощью first
или [0]
, который обращается к первому индексу любого массива.
Аналогично, когда вы применяете [0] к строке, например "Alice"[0]
, это метод String#slice
, который обращается к первому элементу "Alice"
.
Следовательно, "Alice"[0] => "A"
См .: https://rubyapi.org/2.7/o/s?q=slice