0

この skip_tracks メソッドで何が起こっているかは理解していますが、ブロック内の動作の根底にあるルールを理解していないため、このように書くことはできませんでした。これは私を困惑させている部分です

 skip.times { playlist.push playlist.shift}

シフトされた値が返されてプレイリストにプッシュされるように、右から左に実行するというルールはありますか? シフトされた値がプレイリストにプッシュされることをどのように知ることができますか? これをルールにするために、ブロック内で何が起こっているのでしょうか? 説明してもらえますか...また、このブロックが複数行にわたって記述されていた場合、playlist.pushはplaylist.shiftの上にあるため、最初に実行されますが、このコードでは、プッシュする前に値をシフトする必要があります


def skip_tracks(playlist, skip)
  if skip > 0
    skip.times { playlist.push playlist.shift}
  else
    skip.abs.times { playlist.unshift playlist.pop }
  end
  puts playlist
end


playlist = ['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l']
skip_tracks(playlist, 2)
4

1 に答える 1

1

andは、引数を取り、渡された要素をリストに入れる関数とpush考えてください。unshiftおよび要素shiftpop削除して返す関数として。

C ライクな関数構文を使用して何が起こっているかを記述すると、次のようになります。

playlist.push(playlist.shift())

playlist.unshift(playlist.pop())

したがって、これらの関数呼び出しを裏返しに解決し、表示される動作が得られます。

于 2012-11-07T04:59:20.817 に答える