12.5.2 写计算
C# 查询表达式和 F# 计算表达式,可以使用函数,行为方式非标准(返回单子值),就好像返回普通值。我们在这一节使用的计算类型是 ValueWrapper ,因此,原始函数将返回值的类型是 ValueWrapper,而不是 T。
实现这些函数,既可以使用其他的查询或计算表达式,也可以通过直接创建计算类型的值。有些计算表达式可以封装复杂的逻辑,所以,直接创建值可能有困...
分类:
其他好文 时间:
2015-01-30 16:08:33
阅读次数:
167
12.5.1 声明计算类型
在这个示例中,计算的类型(在 Haskell 术语中的单子类型)称为 ValueWrapper,它只是存储泛型类型参数T 的值,并不会为类型增加任何其他功能。这就是说,计算只处理标准值,但是,我们能够用 C# 中的查询表达式, F# 中的计算表达式,写代码(来增加功能)。
清单 12.17 显示了在 C# 和 F# 中的类型声明。在 C# 中,我们创建简单的类...
分类:
其他好文 时间:
2015-01-29 17:41:52
阅读次数:
196
12.4.2 自定义 F# 语言
到目前为止,我们所讨论过的序列表达式,都是用 seq 标识符表示,后面的代码块括在大括号中。然而,F# 还允许我们创建自己的标识符,给代码块以特殊的意义。通常,这个功能称为计算表达式(computation expressions),而序列表达式是它的一个特例,是由 F#核心所实现,并经编译器优化。
我们已经知道,计算表达式可以包含标准的语言结构,比如 ...
分类:
编程语言 时间:
2015-01-29 15:57:10
阅读次数:
253
(1)alert函数:显示一个警告对话框,包括一个OK按钮。
(2)confirm函数:显示一个确认对话框,包括OK、Cancel按钮。
(3)escape函数:将字符转换成Unicode码。
(4)eval函数:计算表达式的结果。
eval("x=10;y=20;document.write(x*y)");
document.write(ev...
分类:
编程语言 时间:
2015-01-29 15:54:46
阅读次数:
190
12.4 可选工作流(alternativeworkflows)
计算表达式(Computation expressions)是一种 F# 功能,部分灵感是来自Haskell 的单子(monads)。单子有个不好的名声,对于brain-bustingly 有困难的人来说,但是,也不用担心。我们将实现一组重要的方法,可以在 C# 中很好地处理 Option 值,以及在 F# 中的类似做法,如...
分类:
其他好文 时间:
2015-01-29 10:30:52
阅读次数:
168
assert() 宏用法注意:assert是宏,而不是函数。在C的assert.h头文件中。#inlcude 用法:void assert( int expression );assert的作用是先计算表达式expression,如果其值为假(即为0),那么它先向标准错误流stderr打印一条出错信...
分类:
其他好文 时间:
2015-01-21 14:54:21
阅读次数:
147
第十二章序列表达式和可选工作流
本章介绍
■生成和处理序列值
■处理 F# 序列表达式
■理解单子和 LINQ 表达式
■实现 F# 计算表达式
在我们开始讨论序列表达式之前,必须知道什么是序列(sequence),这也是数学的F# 术语。序列是有序的列表,可能包含无穷的元素。这一切听上去有点抽象,但也不用担心,我们已经熟悉这种类型了,在.NET 中表达同样概念的是:...
分类:
其他好文 时间:
2015-01-18 11:53:04
阅读次数:
143
在通过配置文件对系统进行参数配置时,有时需要更好的理解参数值的具体意义,往往采用计算表达式的方式设置,例如1天换成秒数为86400,如果写成24*60*60就很清晰的表达是一天的秒数。但是这个表达式通过properties的方式获取为字符串,这里就需要动态计算这个表达式。ScriptEng..
分类:
编程语言 时间:
2015-01-16 19:25:11
阅读次数:
231
逗号表达式的一般形式是:表达式1,表达式2,表达式3……表达式n逗号表达式的求解过程是:先计算表达式1的值,再计算表达式2的值,……一直计算到表达式n的值。最后整个逗号表达式的值是表达式n的值。看下面几个例子: x=8*2,x*4 /*整个表达式的值为64,x的值为16*/ (x=8*2,x*4),...
分类:
编程语言 时间:
2015-01-08 13:00:08
阅读次数:
165