Ruby for循环陷阱?
在讨论
Ruby循环时,Niklas B.最近谈到了与每个循环相比的for循环“不引入新的范围”.我想看看一些如何感受到这一点的例子.
O.K.,我扩展了一个问题:在Ruby中还有哪些,我们看到什么是apears / end block delimiters,但实际上没有范围?除了…之外还有什么…结束? 另一个问题的扩展,有没有办法用大括号{block}编写循环? 解决方法
我们举一个例子来说明一点:
results = [] (1..3).each do |i| results << lambda { i } end p results.map(&:call) # => [1,2,3] 酷,这是预期的.现在检查以下内容: results = [] for i in 1..3 results << lambda { i } end p results.map(&:call) # => [3,3,3] 嗯,怎么回事?相信我,这些类型的错误是令人讨厌的追踪. Python或JS开发者会知道我的意思:) 只有这样,我才能避免像瘟疫这样的循环,尽管有更多的有利于这一立场的理由.正如Ben正确指出的那样,使用 lambdas = 1.upto(3).map { |i| lambda { i } } p lambdas.map(&:call)
循环结构中的每一个都可以这样使用: while true do #... end until false do # ... end 另一方面,我们可以写出每一个这些没有做(这显然更喜欢): for i in 1..3 end while true end until false end
不,那里没有.还要注意,术语“块”在Ruby中具有特殊的含义. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |