【问题标题】:Ruby, error with brackets for code block [closed]Ruby,代码块括号错误[关闭]
【发布时间】:2013-05-13 03:33:43
【问题描述】:

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

我有一个“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}"}

据我了解,'do |i|'在“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}"

【问题讨论】:

    标签: ruby iterator codeblocks


    【解决方案1】:

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

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

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

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

    【讨论】:

    • 那么在这种情况下“做什么”是什么?后置修饰语?你能指点我这方面的文档吗?谢谢!
    【解决方案2】:

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

    完整的块是

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

    所以正确的括号版本是

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-03-15
      • 1970-01-01
      • 2017-05-18
      • 2012-01-18
      • 1970-01-01
      • 1970-01-01
      • 2015-05-09
      • 2012-03-27
      相关资源
      最近更新 更多