浏览 1627 次
锁定老帖子 主题:探讨生成器的几种实现形式
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
|
|
---|---|
作者 | 正文 |
发表时间:2007-09-10
一、大家都会的: // 代码 public int seed = 0; public int generator() { ++ seed; return seed; } // 使用 10.times { = generator() + " " }; // 结果 1 2 3 4 5 6 7 8 9 10 二、基于类实现: // 代码 public class Generator { public int _seed; public int next() { this._seed = this._seed + 1; return this._seed; } } public Generator generator = Generator(); // 使用 10.times { = generator.next() + " " }; // 结果 1 2 3 4 5 6 7 8 9 10 三、基于对象实现: // 代码 public object generator { public int _seed; public int next() { this._seed = this._seed + 1; return this._seed; } } // 使用 10.times { = generator.next() + " " }; // 结果 1 2 3 4 5 6 7 8 9 10 四、使用函数闭包: // 代码 public function init(int seed) { return { ++ seed; return seed }; } function generator = init(0); // 使用 10.times { = generator() + " " }; // 结果 1 2 3 4 5 6 7 8 9 10 五、使用YIELD: // 代码 public int init(int seed) { while(true) { ++ seed; return seed }; } function generator = sys::yield(init, [0]); // 使用 10.times { = generator() + " " }; // 结果 1 2 3 4 5 6 7 8 9 10 六、使用CURRY: // 代码 public int init(int seed) { return seed + __func__.execTimes; } function generator = sys::curry(init, [0]); // 使用 10.times { = generator() + " " }; // 结果 1 2 3 4 5 6 7 8 9 10 七、返回不同的类型: // 代码 public variant init(string s) { return s; return length(s); return {|string who| = who, "said:", s, eol}; } function generator = sys::yield(init, ["hello world"]); // 使用 = "length \"" + generator() + "\" is " + generator(), eol; generator()("LYSEE"); // 结果 length "hello world" is 11 LYSEE said: hello world 实现生成器确实很有意思,一时兴起就写了了几种实现形式,哪位老大还知道别的形式,不妨补充一下,谢谢了! 声明:ITeye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
推荐链接
|
|
返回顶楼 | |