本文簡要介紹ruby語言中 Continuation類
的用法。
Continuation
對象由 Kernel#callcc
生成,在 +require+d continuation
之後。它們擁有一個返回地址和執行上下文,允許從程序中的任何位置非本地返回到 callcc
塊的末尾。延續有點類似於 C 的setjmp/longjmp
的結構化版本(盡管它們包含更多狀態,因此您可能會認為它們更接近線程)。
例如:
require "continuation"
arr = [ "Freddie", "Herbie", "Ron", "Max", "Ringo" ]
callcc{|cc| $cc = cc}
puts(message = arr.shift)
$cc.call unless message =~ /Max/
產生:
Freddie
Herbie
Ron
Max
您也可以在其他方法中調用 callcc :
require "continuation"
def g
arr = [ "Freddie", "Herbie", "Ron", "Max", "Ringo" ]
cc = callcc { |cc| cc }
puts arr.shift
return cc, arr.size
end
def f
c, size = g
c.call(c) if size > 1
end
f
這個(有點做作的)示例允許內部循環提前放棄處理:
require "continuation"
callcc {|cont|
for i in 0..4
print "#{i}: "
for j in i*5...(i+1)*5
cont.call() if j == 17
printf "%3d", j
end
end
}
puts
產生:
0: 0 1 2 3 4 1: 5 6 7 8 9 2: 10 11 12 13 14 3: 15 16
相關用法
- Ruby Continuation.cont[args, ...]用法及代碼示例
- Ruby Continuation.call用法及代碼示例
- Ruby Context.save_history=用法及代碼示例
- Ruby Context.echo_on_assignment?用法及代碼示例
- Ruby Context.echo?用法及代碼示例
- Ruby Context.echo_on_assignment用法及代碼示例
- Ruby Context.auto_indent_mode用法及代碼示例
- Ruby Context.newline_before_multiline_output用法及代碼示例
- Ruby Context.newline_before_multiline_output?用法及代碼示例
- Ruby Context.echo用法及代碼示例
- Ruby Context.add_class用法及代碼示例
- Ruby Constants模塊用法及代碼示例
- Ruby Converter.primitive_errinfo用法及代碼示例
- Ruby Config.get_value用法及代碼示例
- Ruby Config.to_s用法及代碼示例
- Ruby Constructive類用法及代碼示例
- Ruby Constructive.each用法及代碼示例
- Ruby Converter.convert用法及代碼示例
- Ruby Converter.inspect用法及代碼示例
- Ruby Converter.insert_output用法及代碼示例
- Ruby ConditionVariable類用法及代碼示例
- Ruby Converter.search_convpath用法及代碼示例
- Ruby Converter.last_error用法及代碼示例
- Ruby Converter.primitive_convert用法及代碼示例
- Ruby Converter.putback用法及代碼示例
注:本文由純淨天空篩選整理自ruby-lang.org大神的英文原創作品 Continuation類。非經特殊聲明,原始代碼版權歸原作者所有,本譯文未經允許或授權,請勿轉載或複製。