ruby中有很多经典的驱动器结构,比如枚举器和生成器等.这次简单介绍下生成器的概念.生成器是按照功能要求,一次产生一个对象,或称之为生成一个对象的方法.ruby中的连续体正好可以用来完成生成器的功能.连续体说起来晦涩,其实还是很简单的,它有3个特点:
1. callcc方法会给代码块传一个连续体对象,你可以保存该对象;
2. 当调用连续体的call方法时指令流会跳转到callcc方法之后;
3. 如果给连续体的call方法传递对象,则callcc方法会返回该对象,如果不传递对象,callcc会返回nil.
我们下面参考一段实例代码,我加了注释.该代码用来生成Fibonacci数列和一个递增数列.两个类FibG和IncG都继承于"抽象类"G,G实现生成器的"抽象"事件驱动逻辑,而具体类FibG和IncG用来完成实际生成逻辑,全在代码里啦:
复制代码 代码如下:
#!/usr/bin/ruby
require 'continuation'
#一个生成器"抽象"类
class G
def initialize
do_g
end
#@main_context实际是next的"出口",让next返回@main_context.call(v)的值,即生成的数
def next
callcc do |c|
@main_context = c
@g_context.call
end
end
private
def do_g
callcc do |c|
@g_context = c
return
end
g_loop #虚方法,由实际具体类实现,但由G来调用!
end
#@g_context实际为G的内在驱动器,其会反复回到g_loop中不断生成新的数
def g(v)
callcc do |c|
@g_context = c
@main_context.call(v)
end
end
end
#具体的生成器类,用来生成Fibonacci数列
class FibG < G
private
#具体类实现g_loop,实际要怎么生成必须由具体类说了算
#g_loop不能直接由FibG的实例对象调用,而要通过G来驱动
def g_loop
g(1)
a,b=1,1
loop do
g(b)
a,b=b,a+b
end
end
end
class IncG < G
def initialize(inc_val=10)
super()
@inc_val = inc_val
end
<span style="font-size:18px;"></span><pre name="code" class="ruby">private
def g_loop
x=0
loop do
g(x+@inc_val)
x+=@inc_val
end
end
end
f = FibG.new
100.times {printf "%d " % f.next}
puts
i = IncG.new
100.times {printf "%d " % i.next}
puts
i = IncG.new(11)
100.times {printf "%d " % i.next}
免责声明:本站资源来自互联网收集,仅供用于学习和交流,请遵循相关法律法规,本站一切资源不代表本站立场,如有侵权、后门、不妥请联系本站删除!
P70系列延期,华为新旗舰将在下月发布
3月20日消息,近期博主@数码闲聊站 透露,原定三月份发布的华为新旗舰P70系列延期发布,预计4月份上市。
而博主@定焦数码 爆料,华为的P70系列在定位上已经超过了Mate60,成为了重要的旗舰系列之一。它肩负着重返影像领域顶尖的使命。那么这次P70会带来哪些令人惊艳的创新呢?
根据目前爆料的消息来看,华为P70系列将推出三个版本,其中P70和P70 Pro采用了三角形的摄像头模组设计,而P70 Art则采用了与上一代P60 Art相似的不规则形状设计。这样的外观是否好看见仁见智,但辨识度绝对拉满。
更新日志
- 群星.1996-各自各精彩【上华】【WAV+CUE】
- 《终极幸运之塔》评测:藏在童年回忆里爬塔佳作
- 《战神5》PC版评测:轻推W缓慢前行
- 《阿瑞亚之旅》评测:更适合佛系玩家体质的跑团
- 黑神话悟空浮屠界紫门怎么开 浮屠界紫门打开方法介绍
- 黑神话悟空龟泪怎么获得 黑神话悟空龟泪获得方法介绍
- 黑神话悟空怎么获得还魂丹 黑神话悟空还魂丹获取方法一览
- HiFi顶级人声天碟《试音齐秦》wav
- 张敬轩.2012-WhyNot(EP)【环球】【WAV+CUE】
- 张小英1988-情愁[新加坡复黑版][WAV+CUE]
- 游民金币礼品补货啦 Steam充值卡等你兑换!
- 《暗喻幻想:ReFantazio》M站均分94分 近年最好的RPG游戏之一
- 今年第一项诺贝尔奖揭幕 生理学或医学奖揭晓
- 《梁静茹 华语乐坛情歌天后 爱久见人心》[WAV/分轨][360MB]
- 《田震 绝版珍藏 依然在飞》[WAV+CUE][600MB]