本文簡要介紹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 Kernel.caller用法及代碼示例
- Ruby Kernel.class用法及代碼示例
- Ruby Kernel.clone用法及代碼示例
- Ruby Kernel.local_variables用法及代碼示例
- Ruby Kernel.Integer用法及代碼示例
- Ruby Kernel.binding用法及代碼示例
- Ruby Kernel.frozen?用法及代碼示例
- Ruby Kernel.`cmd`用法及代碼示例
- Ruby Kernel.autoload用法及代碼示例
- Ruby Kernel.loop用法及代碼示例
- Ruby Kernel.Hash用法及代碼示例
- Ruby Kernel.set_trace_func用法及代碼示例
- Ruby Kernel.exit!用法及代碼示例
- Ruby Kernel.trap用法及代碼示例
- Ruby Kernel.String用法及代碼示例
- Ruby Kernel.select用法及代碼示例
- Ruby Kernel.syscall用法及代碼示例
- Ruby Kernel.then用法及代碼示例
- Ruby Kernel.sprintf用法及代碼示例
- Ruby Kernel.Pathname用法及代碼示例
- Ruby Kernel.srand用法及代碼示例
- Ruby Kernel.yield_self用法及代碼示例
- Ruby Kernel.BigDecimal用法及代碼示例
- Ruby Kernel.raise用法及代碼示例
- Ruby Kernel.test用法及代碼示例
注:本文由純淨天空篩選整理自ruby-lang.org大神的英文原創作品 Kernel.catch。非經特殊聲明,原始代碼版權歸原作者所有,本譯文未經允許或授權,請勿轉載或複製。