Рубиновые петли и классы; разбить строку на массив и снова вернуться к строке

Руби новичок здесь работает над циклами с классами. Я должен был создать метод, который бы брал строку и добавлял восклицательные знаки в конец каждого слова (делая его массивом с.split) и снова присоединял "восклицательные" слова в виде строки. Я занимаюсь этим уже два часа и решил, что должен обратиться за помощью. У меня есть несколько идей, но я продолжаю выдавать ошибку NoMethod. Ниже приведен один из способов, который имел смысл для меня, но, конечно, он не работает. Я также добавил спецификации в самом конце.

class StringModifier
  attr_accessor :string
  def initialize(string)
    @string = string
  end

  def proclaim
    new_array = []
    string.split.each do |word|
      new array = "#{word}!"
        new_array.join
    end
    new_array
  end
end

SPECS

describe StringModifier do
  describe "#proclaim" do
    it "adds an exclamation mark after each word" do
      blitzkrieg_bop = StringModifier.new("Hey ho let's go").proclaim
      expect(blitzkrieg_bop).to eq("Hey! ho! let's! go!")
    end
  end
end

1 ответ

Решение

Напишите ваш метод как:

def proclaim
  string.split.map { |word| "#{word}!" }.join(" ")
end

Или напишите это как:

def proclaim
  a = string.split
  ("%s! " * a.size % a).strip
end

Проверено:

[30] pry(main)> a = "Hey ho let's go".split
=> ["Hey", "ho", "let's", "go"]
[31] pry(main)> ("%s! " * a.size % a).strip
=> "Hey! ho! let's! go!"
[32] pry(main)>
Другие вопросы по тегам