當前位置: 首頁>>編程示例 >>用法及示例精選 >>正文


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。非經特殊聲明,原始代碼版權歸原作者所有,本譯文未經允許或授權,請勿轉載或複製。