2

のような配列を返すクラスのメソッドがいくつかあります["1", "3", "2", "6", "2"]。これらが数値ではなく文字列配列であっても問題ありません。配列を取得して、このような単一の文字列に変換する別のメソッドがあります1 3 2 6 2

class Turn
  def initialize
    @rolls = 1
    @dice = []
  end

  def roll
    @roll = []
    x = 5 - @dice.length
    x.times do |i|
      @roll[i] = rand(6) + 1
    end
    @roll  # ["1", "3", "2", "6", "2"]
  end

  def show
    @dice  # ["1", "3", "6"]
  end

  def line(something)
    temp = ""
    something.each do |x|
      temp << x + " "
    end
    puts temp   # "1 3 6 " or "1 3 2 6 2 "
  end
end

次に、メソッドをチェーン化できるようにしたいので、

first = Turn.new
first.roll.line
first.show.line

しかし、私はこれを行う方法を本当に知りません、そして私はどのようにオンラインで見つけることができませんでした。私は戻ってくるのを見selfたことがありますが、それが何をするのか本当に理解できません。メソッド内のコードは、line別のメソッドに移動すると機能するため、問題は実際にはチェーンとリターンを処理することだけです。

誰かがコードを手伝うだけでなく、戻り値に関してチェーンがどのように機能するか、そして自己を返すことがどのように機能するかを手伝うことができれば、それは素晴らしいことです。

ありがとうございました!

4

1 に答える 1

2

あなたのメソッド#roll#showメソッドは配列を返すので、Array#line実際に実行できるようにメソッドを定義する必要がありますfirst.roll.line

Array#joinところで、 #lineメソッドと同じように、配列要素を文字列に結合するものもすでにあるので、#lineメソッドを使用first.roll.join(' ')して削除することもできます。

于 2010-08-05T02:24:00.897 に答える