12.7.3 使用计算表达式进行重构

在前一章,我们讨论过重构函数式程序的方法,最后一个主题是延迟性,它变改代码的执行方式,而不影响程序的结果。从某种意义上讲,添加延迟性也可看作是一种重构技术;计算表达式的类似之处在于,增加额外的代码,但不改变核心意思。

提示

在计算表达式和延迟性之间有密切的关系,使用 Lazy<‘T> 计算类型,创建能够把代码转换成延迟计算的计算表达式,是有可能的。我们可以尝试实现自定义的计算,唯一的难度在于写 Bind 成员。在这里,我们不进行讨论,在本书的网站上可以找到其他的信息。

重要性在于,把标准的 F# 代码转换变成非标准行为的代码,是相当容易的;只要把代码括在计算表达式块中,并为计算表达式添加对实现的基本操作的调用,比如,刚刚实现的 logMessage 函数。当我们实现的代码分成几个函数时,必须把对这些函数的调用,从通常的调用,或者通常的值绑定,改成自定义的值绑定,使用 let!,或者 do! 基本操作。在 F# 中写计算表达式的代码,典型方法是,首先写出标准代码,易于编写和测试,然后,使用计算表达式重构到更高级的版本。

时间: 2024-09-30 16:01:40

12.7.3 使用计算表达式进行重构的相关文章

12.6 实现选项的计算表达式

在 12.4 节,我们用选项值作为示例,介绍了用 LINQ 查询和 F# 计算表达式创建非标准计算的概念,处理选项值的代码,有自定义的值绑定读取实际值,如同标准值.既然我们已经知道如何转换计算表达式,也就知道我们的 Bind 成员会接收值和 lambda 函数.因为我们处理的是选项类型计算表达式,只有当值是 Some(x) 而不是 None 时,我们才打算执行 lambda 表达式:后一种情况,我们可以立即返回 None. 要运行前面的例子,我们需要在 C# 中实现 LINQ 查询运算符,在 F

PHP学习之-1.4 计算表达式

计算表达式 不同于HTML和CSS,在PHP中做计算,比如我们写 echo 12*3 计算结果是36.代码如下 1 <?php echo 12*3;?> 实例 <!DOCTYPE HTML> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8"> <title>计算表达式</titl

12.5.1 声明计算类型

在这个示例中,计算的类型(在 Haskell 术语中的单子类型)称为 ValueWrapper<T>,它只是存储泛型类型参数T 的值,并不会为类型增加任何其他功能.这就是说,计算只处理标准值,但是,我们能够用 C# 中的查询表达式, F# 中的计算表达式,写代码(来增加功能). 清单 12.17 显示了在 C# 和 F# 中的类型声明.在 C# 中,我们创建简单的类,在 F# 中,将使用一个简单的只有一种情况的差别联合. 清单 12.17 C# 和 F# 中的计算值 // C# 的类声明 cl

Justinmind使用教程(2)——计算表达式及条件使用方法

Justinmind的计算表达式以及条件condition的使用对于初学者而言比较麻烦. 结合网上了一个教程本文主要针对计算器示例进行计算表达式以及条件的使用. 实现目标:根据单价(静态)和数量(动态),自动计算出金额.下图: 在数量文本框右侧添加两个矩形部件,上方为+,下方为-,点击+或-自动减1,当数量为0时,不允许计算. [具体步骤] (只介绍重点) 1.选中+:2.添加事件(点击+按钮设置数量+1): 3.事件为"鼠标单击时"(默认):4.选择动作为"设置值"

字符串计算表达式

string str="4+4+2.1"; 要的效果: double sum=4+4+2.1: 方案一: 动态计算表达式: 1 public class Expression 2 { 3 object instance; 4 MethodInfo method; 5 /// <summary> 6 /// 表达试运算 7 /// </summary> 8 /// <param name="expression">表达试</p

12.5.2 写计算

C# 查询表达式和 F# 计算表达式,可以使用函数,行为方式非标准(返回单子值),就好像返回普通值.我们在这一节使用的计算类型是 ValueWrapper <T>,因此,原始函数将返回值的类型是 ValueWrapper<T>,而不是 T. 实现这些函数,既可以使用其他的查询或计算表达式,也可以通过直接创建计算类型的值.有些计算表达式可以封装复杂的逻辑,所以,直接创建值可能有困难.这时,通常写一些返回这种计算类型的基本操作,再使用这些基本操作实现其他的一切.然而,构建 ValueW

题目1101:计算表达式(栈的使用)

题目链接:http://ac.jobdu.com/problem.php?pid=1101 详解链接:https://github.com/zpfbuaa/JobduInCPlusPlus 参考代码: // // 1101 计算表达式.cpp // Jobdu // // Created by PengFei_Zheng on 06/05/2017. // Copyright © 2017 PengFei_Zheng. All rights reserved. // #include <stdi

华为上机练习题--计算表达式

题目: 输入一个表达式,没有括号,数字小于0-9之间,输出计算结果,所有的中间结果化为整形. 例如:  输入:3+8×2/9-2 输出:2 函数原型 public int getMyRet(String str) 分析: 这个题目略显高端啊, 像我这种非专业的自学者,还真没有学过编译原理之类的课程, 要自己实现一个这种小型的编译器是非常困难啊, 所幸的是这个题目是用java来实现的, 而我本身也曾经看到过用java来实现这类的问题, 这类问题有一种方法就是实现类编译器功能的函数, 这个我是驾驭不

Visual Studio断点调试, 无法监视变量, 提示无法计算表达式

在使用Visual Studio 2012进行断点调试时,对某个变量添加监视,出现"无法计算表达式"的提示. 解决办法:依次点击菜单栏中的"调试"→"图形"→"启动诊断" 期间会出现类似如下界面: 公共符号下载完毕,断点调试,变量监视功能恢复正常!