1

eachフルスタック オンライン プログラム Bloc のメソッドとループについて学ぶ Ruby 初心者。この特定の問題については以前にここで話しましたが、その投稿とは異なるエラー メッセージが表示され、その理由がわかりません。

説明では、class StringModifier「開始時に文字列を取得」し、インスタンス メソッドproclaimは「文字列を個別の単語の配列に分割し、それぞれに感嘆符を追加してから、それらをスペースで結合して新しい文字列を返します。」

ArgumentError wrong number of arguments (0 for 1)irb でエラーが発生し続けます。引数を宣言していない場所がわかりません。stringそれが変数の初期化ではないでしょうか。これは SO に関する私の最初の質問です。そのため、正しい方向への助けや指摘をいただければ幸いです。以下のコードと仕様スクリプト:

class StringModifier
  attr_accessor :string

  def initialize(string)
    @string = string
  end

  def proclaim(string)
    new_array = []
    string.each do |x|
      new_array << "#{x.split(' ').join('!')}"
    end
    new_array
  end
end

仕様スクリプトは次のとおりです。

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
4

2 に答える 2

2

あなたのproclaimメソッドは、文字列が再び渡されることを期待しています。初期化時にすでに文字列を保存しているため、これは必要ありません。また、コードにいくつかの問題が含まれており、簡略化できるようです。これを試して:

class StringModifier
  attr_accessor :string

  def initialize(string)
    @string = string
  end

  def proclaim
    @string.split(' ').join('! ').concat('!')
  end
end
于 2015-03-21T13:54:37.667 に答える
0

これは私にとってはうまくいきました。私自身、Bloc Ruby コースを受講しています。

class StringModifier
  attr_accessor :string

  def initialize(string)
    @string = string
  end

  def proclaim
    new_array = []
    string.split.each do |word|
      new_array << "#{word}!"
    end
    new_array.join(" ")
  end
end
于 2015-10-12T00:23:47.673 に答える