rya*_*n_m 0 ruby mass-assignment
所以,我正在尝试通过做一些项目的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
Run Code Online (Sandbox Code Playgroud)
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(", ")
Run Code Online (Sandbox Code Playgroud)
1:它被称为并行分配.Ruby需要创建时态变量,而不是使用不正确的值覆盖变量.所以这个例子:
cur, nxt = nxt, cur + nxt
Run Code Online (Sandbox Code Playgroud)
是相同的:
tmp = cur + nxt
cur = nxt
nxt = tmp
Run Code Online (Sandbox Code Playgroud)
bur更紧凑,没有地方做出愚蠢的错误等等.
2:stepruby核心库中有2 种方法.首先是Numeric课堂(每个数字),所以你可以写:
5.step(100, 2) {}
Run Code Online (Sandbox Code Playgroud)
它从5开始并从中获取每秒数,当达到100时停止.
stepRuby中的第二个用于Range:
(5..100).step(2) {}
Run Code Online (Sandbox Code Playgroud)
它需要范围(有开始和结束)并在每个第二个元素中迭代它.它是不同的,因为你可以传递它不一定是数字范围,它将从它获取每个第n个元素.
看看http://ruby-doc.org/core-1.8.7/index.html
| 归档时间: |
|
| 查看次数: |
1409 次 |
| 最近记录: |