ruby并行分配,步问题

所以,我正在尝试通过做一些项目的euler问题来学习ruby,而且我遇到了一些我无法解释的事情和逗号?运算符? 在两者的中间。 我还没有找到这方面的好文档,也许我只是不按照我应该使用谷歌,但好的ruby文档似乎有点稀疏。 。 。

1:您如何描述这是如何工作的? 第一个片段是我不明白的ruby代码,第二个是我编写的代码,只有在精心追踪第一个代码后才会执行相同的操作:

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

2:在下面的例子中,你如何描述’step’行正在做什么? 从我可以收集的内容来看,step命令的工作方式类似于(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(", ") 

1:它被称为并行分配。 Ruby需要创建时态变量,而不是使用不正确的值覆盖变量。 所以这个例子:

 cur, nxt = nxt, cur + nxt 

是相同的:

 tmp = cur + nxt cur = nxt nxt = tmp 

bur更紧凑,没有地方做出愚蠢的错误等等。

2:ruby核心库中有step法。 首先是Numeric类(每个数字),所以你可以写:

 5.step(100, 2) {} 

它从5开始并从中获取每秒数,当达到100时停止。

Ruby的stepRange

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

它需要范围(有开始和结束)并在每个第二个元素中迭代它。 它是不同的,因为你可以传递它不一定是数字范围,它将从它获取每个第n个元素。

看看http://ruby-doc.org/core-1.8.7/index.html

  1. 这是一个并行分配 。 在您的示例中,Ruby首先评估nxtcur + nxt 。 然后它分别将结果分配给curnxt

  2. 代码中的step方法实际上是Numeric#step (范围用(n..m)构造)。 Numericstep方法使用它被调用的数字作为起始点进行迭代。 参数分别是限制和步长。 因此,上面的代码将使用i * i调用块,然后每次连续增加i直到达到max

Ruby文档的一个很好的起点是ruby-doc.org网站。