相关疑难解决方法(0)

当使用Proc.new v.&符号时,为什么ruby中的break语句表现不同?

块的break语句(根据Ruby Programming Language)定义如下:

它导致块返回到它的迭代器,迭代器返回到调用它的方法.

因此,当运行以下代码时,它会导致LocalJumpError.

def test
    puts "entering test method"
    proc = Proc.new { puts "entering proc"; break }
    proc.call # LocalJumpError: iterator has already returned
    puts "exiting test method"
end
test
Run Code Online (Sandbox Code Playgroud)

虽然以下代码不会抛出LocalJumpError.&符号有什么特别之处?&符号是否隐含使用Proc.new?

def iterator(&proc)
    puts "entering iterator"
    proc.call # invoke the proc
    puts "exiting iterator" # Never executed if the proc breaks
end

def test
    iterator { puts "entering proc"; break }
end
test
Run Code Online (Sandbox Code Playgroud)

换句话说,我读了&符号作为进入Proc.new呼叫的手段.此时行为应该与第一个代码段相同.

def iterator (p = Proc.new { puts "entering proc"; …
Run Code Online (Sandbox Code Playgroud)

ruby ruby-on-rails proc-object

8
推荐指数
1
解决办法
2603
查看次数

标签 统计

proc-object ×1

ruby ×1

ruby-on-rails ×1