当前位置: 首页>>代码示例 >>用法及示例精选 >>正文


Ruby Kernel.catch用法及代码示例


本文简要介绍ruby语言中 Kernel.catch 的用法。

用法

catch([tag]) {|tag| block } → obj

catch 执行其块。如果未调用throw,则块将正常执行,并且catch 返回最后计算的表达式的值。

catch(1) { 123 }            # => 123

如果调用 throw(tag2, val),Ruby 会在其堆栈中搜索 catch 块,其 tag 具有与 tag2 相同的 object_id 。找到后,该块将停止执行并返回 val(如果没有给 throw 提供第二个参数,则返回 nil)。

catch(1) { throw(1, 456) }  # => 456
catch(1) { throw(1) }       # => nil

tag 作为第一个参数传递时,catch 将其作为块的参数。

catch(1) {|x| x + 2 }       # => 3

当没有给出 tag 时,catch 产生一个新的唯一对象(从 Object.new 开始)作为块参数。然后可以将此对象用作 throw 的参数,并将匹配正确的 catch 块。

catch do |obj_A|
  catch do |obj_B|
    throw(obj_B, 123)
    puts "This puts is not reached"
  end

  puts "This puts is displayed"
  456
end

# => 456

catch do |obj_A|
  catch do |obj_B|
    throw(obj_A, 123)
    puts "This puts is still not reached"
  end

  puts "Now this puts is also not reached"
  456
end

# => 123

相关用法


注:本文由纯净天空筛选整理自ruby-lang.org大神的英文原创作品 Kernel.catch。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。