0

それで、私はいくつかのプロジェクト オイラーの質問をして Ruby を学ぼうとしていますが、説明できないいくつかのことに出くわしました。両方の中間です。これに関する適切なドキュメントを見つけることができませんでした。Google を適切に使用していないだけかもしれませんが、適切な Ruby ドキュメントは少しまばらなようです。. .

1: これがどのように機能しているかをどのように説明しますか? 最初のスニペットは私が理解できない ruby​​ コードです。2 番目のスニペットは私が書いたコードで、最初のスニペットを苦労してトレースした後にのみ同じことを行います。

#what is this doing?
cur, nxt = nxt, cur + nxt

#this, apparently, but how to describe the above?
nxt = cur + nxt   
cur = nxt - cur   

2: 次の例で、「ステップ」を含む行が何をしているのかをどのように説明しますか? 私が収集できるものから、ステップコマンドは (range).step(step_size) のように機能しますが、これは (starting_point).step(ending_point, step_size) を実行しているようです。私はこの仮定で正しいですか?これの良いドキュメントはどこにありますか?

#/usr/share/doc/ruby1.9.1-examples/examples/sieve.rb  
# sieve of Eratosthenes
max = Integer(ARGV.shift || 100)
sieve = []
for i in 2 .. max
  sieve[i] = i
end

for i in 2 .. Math.sqrt(max)
  next unless sieve[i]
  (i*i).step(max, i) do |j|
    sieve[j] = nil
  end
end
puts sieve.compact.join(", ")
4

2 に答える 2

5

1: 並列代入といいます。Ruby は一時変数を作成し、変数を誤った値でオーバーライドしないように注意します。したがって、この例:

cur, nxt = nxt, cur + nxt

以下と同じです:

tmp = cur + nxt
cur = nxt
nxt = tmp

ばかげた間違いをする場所がなく、よりコンパクトになります。

2: stepruby​​ コア ライブラリには 2 つのメソッドがあります。最初はNumericクラス (すべての数字) のためのものなので、次のように書くことができます:

5.step(100, 2) {}

5 から始まり、1 秒おきに 100 に達すると停止します。

stepRuby の2 番目は次の場合ですRange

(5..100).step(2) {}

範囲 (開始と終了を含む) を取り、2 つおきの要素を使用して反復します。必ずしも数値範囲ではなく渡すことができ、そこからn番目の要素ごとに取得されるため、異なります。

http://ruby-doc.org/core-1.8.7/index.htmlをご覧ください

于 2010-03-09T10:33:06.307 に答える
2
  1. これは並列割り当てです。あなたの例では、Ruby は最初に and を評価nxtcur + nxtます。cur次に、結果をそれぞれおよびに割り当てnxtます。

  2. コード内のstepメソッドは実際にはNumeric#step(範囲は で構築され(n..m)ます) です。のstepメソッドはNumeric、開始点として呼び出された番号を使用して反復します。引数はそれぞれ制限とステップ サイズです。したがって、上記のコードは、ブロックを呼び出してから、 untili * iの連続する各インクリメントに到達します。imax

Ruby ドキュメントの出発点としては、ruby-doc.orgサイトが適しています。

于 2010-03-09T10:32:33.977 に答える