Ruby - 每个迭代器如何工作?

时间:2015-06-24 00:39:46

标签: ruby

我遇到了这个反转字符串的迭代器。我试图将其分解以理解它在做什么,但似乎没有进一步发展。

2.0.0-p643 :053 > s1 = "reverse"
 => "reverse" 
2.0.0-p643 :054 > (0...(s1.length/2)).each {|i| s1[i],s1[s1.length-i-1]=s1[s1.length-i-1],s1[i]}
 => 0...3 
2.0.0-p643 :055 > s1
 => "esrever"

有人可以帮我分解迭代的每个部分吗?

2.0.0-p643 :056 > (0...(s1.length/2))
=> 0...3 

第一个对象只给我0..3。它是如何迭代整个单词的?

为什么在迭代中你需要两次s1 [i]?

1 个答案:

答案 0 :(得分:1)

这并不是那么复杂 - 大多数只是被格式化所掩盖。如果你在多行上写出来,它看起来像这样:

(0...(s1.length/2)).each do |i|
    s1[i], s1[s1.length-i-1] = s1[s1.length-i-1], s1[i]
end

如果您对多项作业不满意,可以使用临时变量进一步细分:

(0...(s1.length/2)).each do |i|
    temp = s1[i]
    s1[i] =  s1[s1.length-i-1]
    s1[s1.length-i-1] = temp
end

它正在迭代左半部分,并用右半部分中的相应字符交换每个字符(第一个带有最后一个,第二个带有倒数第二个等)。