生成器可以看作为程序提供连续输入的流,输入类型通常固定为一种(比如整型),当然也可以是任意多的不同类型,下面探讨几种生成器的实现方法,题目是生成1...N的整形值:
一、大家都会的:
// 代码
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
实现生成器确实很有意思,一时兴起就写了了几种实现形式,哪位老大还知道别的形式,不妨补充一下,谢谢了!
分享到:
相关推荐
本文将深入探讨一个基于C#语言开发的简单代码生成器,该生成器适用于Visual Studio 2010环境。虽然这个代码生成器并不完美,但其基本原理和结构对于初学者和有经验的开发者来说,都具有一定的学习和参考价值。 首先...
实验报告的标题为“中间代码生成器的设计”,其主要探讨了编译方法中涉及的中间代码生成技术。实验的核心目标是设计和实现一个能够将算术表达式转换为四元式序列的工具。四元式是一种常用的中间表示形式,它在编译...
本篇文章将深入探讨JAD文件生成器的用途、工作原理及其重要性。 **JAD文件的作用** 1. **元数据存储**:JAD文件存储了应用程序的关键信息,如应用程序名、版本号、作者信息和版权,帮助设备理解应用的基本属性。 ...
本文将深入探讨基于C#的代码生成器,它以Web形式呈现,方便用户进行个性化扩展。 一、C#代码生成器的原理 C#代码生成器的核心是利用模板引擎和元数据解析,通过预定义的模板或者用户自定义的模板,结合业务模型或...
在深入探讨MFC图片生成器的工作原理和使用方法之前,我们先来了解一下MFC的基本概念。 MFC是微软为Windows应用程序开发设计的一个框架,它封装了Windows API,提供了面向对象的编程接口。开发者可以通过MFC快速地...
本文将深入探讨颜色代码及其生成器的相关知识。 首先,我们要了解几种常见的颜色代码格式: 1. **RGB(红绿蓝)**:这是一种基于三种基本颜色——红色、绿色和蓝色组合而成的颜色模型。每种颜色的值范围通常在0到...
C++ TR1 提供了几种不同的“引擎”来生成随机数: 1. **线性同余法 (`linear_congruential`)**:此引擎使用线性同余公式 `x(i) = (A * x(i-1) + C) mod M` 来生成随机数。 2. **梅森旋转算法 (`mersenne_twister`)*...
二维码生成器小程序源码是一个用于创建和分享二维码的微信小程序应用。这个源码包提供了实现这一功能所需的所有代码,使得开发者可以自定义和部署自己的二维码生成服务。在深入探讨源码之前,我们先来理解二维码的...
在“代码生成器”这个主题中,我们可以深入探讨以下几个关键知识点: 1. **模板引擎**:大多数代码生成器都基于模板引擎工作,允许开发者定义模板文件,这些模板包含了动态语言元素,如变量、循环和条件语句。在...
该C++流程图生成器能够生成以下几种格式的流程图: 1. Visio格式:Visio是Microsoft出品的一款专业图表绘制软件,它可以用于创建各种流程图、组织结构图等。生成的Visio文件可以方便地在Visio中打开编辑,进一步...
本文将详细介绍几种PLC控制步进伺服电机实现定位的方法,并探讨在实现定位过程中需要注意的事项,旨在为工业生产中PLC控制伺服电机定位的过程提供理论依据和参考方案。 首先,精确定位系统的总体设计需要一个闭合...
“C流程图生成器”这个文件很可能是这样一种工具的实现,它无需安装,可以在各种操作系统上运行,提供便利的流程图绘制功能。对于需要编写C程序或解释程序流程的人来说,这样的工具无疑是一个宝贵的资源。 总的来说...
在本项目中,我们将探讨一个用C++实现的MD5生成器,它能够读取文件并计算其MD5值,以便于验证文件内容的完整性和一致性。 首先,MD5算法的核心在于一系列复杂的数学运算,包括位操作、异或、加法等,这些运算通过四...
在本文中,我们将探讨如何利用STM32微控制器生成二维码,实现数据的编码和解码,以便于信息的快速传递和读取。 首先,我们要了解二维码(Quick Response Code)的基本原理。二维码是一种二维条形码,能存储比传统...
在“基于JAVA的一个能按照模板和配置去生成结果的通用生成器框架”中,我们可以探讨几个核心概念和技术。 首先,"模板引擎"是该框架的核心组成部分。在软件开发中,模板引擎允许开发者使用特定的语法在模板文件中...
本文将详细解读一款基于易语言编写的二维码生成器源码,帮助读者理解其工作原理,并探讨如何利用该工具生成URL、文本链接以及字符串等不同形式的二维码。 首先,易语言作为我国本土开发的一种可视化编程语言,以其...
《PHP实现CSS3代码在线生成器的实例解析》 在当今的Web开发中,CSS3已经成为了构建现代网页样式不可或缺的一部分。它提供了丰富的动画、过渡和选择器功能,让网页设计更加灵活且富有表现力。然而,手动编写CSS3代码...
总的来说,“制作六边形图片”和“生成灰度图”是图像处理中的两个关键环节,它们结合在一起可以提供一种独特的视觉表现形式,同时简化图像的复杂性,这对于数据科学家和开发者来说是非常有价值的工具。通过深入理解...
二维码生成器是一种强大的工具,它能够将各种类型的数据转换成二维条形码形式,即二维码。这个特定的二维码生成软件可以处理多种数据类型,包括文字、网址和代码,使得信息的分享和存储变得极其便捷。下面我们将深入...
例如,“词法分析器生成器的设计与实现.pdf”可能涵盖词法分析器的工作原理、构造方法以及如何自动生成相应的分析器代码;“NFA→FA→GFA自动机转换算法.pdf”可能详细解释不同自动机之间的转换过程及其算法。这些...