-2

所以我试图通过这个简单的练习来理解代码块和迭代器,并使用我不理解的括号遇到了一个问题。

我有一个“my_times”方法

class Integer
    def my_times
        c = 0
        until c == self
            yield(c)        # passes 'c' to code block
            c += 1
        end
        self        # return self 
    end
end
5.my_times {|i| puts "i'm on MY iteration #{i}"}

效果很好,然后我有一个'my_each2'可以正常运行

class Array
    def my_each2
        size.my_times do |i|     # <-- do signifies a code block correct? 'end' is unnecessary?
            yield self[i]
        end
        self
    end
end
array.my_each2 {|e| puts "MY2 block just got handed #{e}"}

据我了解,“做|我|” 在“size.my_times 做 |i|” 代码块(没有“结束”?)是否正确?
如果是这样,那么为什么我在尝试将其放入 {brackets} 而不是使用“do”时会出错?

class Array
    def my_each3
        size.my_times {|i| puts "i'm on MY iteration #{i}"} # <-- error here
            yield(self[i])
        end
        self
    end
end
array.my_each3 {|e| puts "MY3 block just got handed #{e}"}

但使用“做”的作品

size.my_times do |i| puts "i'm on MY iteration #{i}"
4

2 回答 2

-1

'做|我|' 在“size.my_times 做 |i|” 代码块(没有“结束”?)是否正确?

不它不是。do ... end是一个代码块。

如果是这样,那么为什么我在尝试将其放入 {brackets} 而不是使用“do”时会出错?

由于条件不满足,所以问题是微不足道的。

于 2013-05-13T03:40:27.830 回答
-2

'做|我|' 是一个代码块,“结束”是它的几行。

完整的块是

size.my_times do |i|     
    yield self[i]
end

所以正确的括号版本是

size.my_times { |i|  yield(self[i]) }

好的继续前进,这里没什么可看的:p

于 2013-05-13T04:51:23.873 回答