为什么使用基本关键字导致此错误?

Cub*_*key 2 f#

我试图为O'Railey的编程F#做一个例子,Chris Smith第53页.

它正在使用函数返回函数.

直接来自VS2013 IDE编辑器,FSI和LinqPad4中的这一行给出了一个错误:

码:

let generatePowerOfFunc base = (fun exponent -> base ** exponent)
Run Code Online (Sandbox Code Playgroud)

错误:

error FS0010: Unexpected keyword 'base' in pattern
Run Code Online (Sandbox Code Playgroud)

我缺少什么,或者作者没有包含哪些内容需要包括在内.

Jon*_*eet 6

我强烈怀疑这base本书只是在写这本书时不是关键词的问题.

尝试使用其他标识符:

let generatePowerOfFunc b = (fun exponent -> b ** exponent)
Run Code Online (Sandbox Code Playgroud)

假设您已经获得2009版的F#编程,那将是在F#2.0发布之前(尽管在1.0之后).我试图找出它作为关键字引入的确切时间......

编辑:实际上,看看2009年编写的这个版本的规范,看起来base在那时已经是一个关键字了.我想知道在本书出版之前原始代码是否写得很明显.

无论哪种方式,我认为将它基本上视为错误是合理的,并且使用有效的标识符应该没问题.

编辑:它实际上列在本书的勘误表中:

示例3-3在VS 2010中不起作用."base"显然是一个关键字,因此它应该被转义或者有一些伏都教使它不是我在书中遗漏的关键字.示例的第2行应如下所示:

   let generatePowerOfFunc ``base`` = (fun exponent -> ``base`` ** exponent);;
Run Code Online (Sandbox Code Playgroud)

或者,应选择不同的变量名称.

作者或编辑的注意事项:
感谢您的反馈,我一定错过了在产品周期后期标记为保留的关键字.

在本书的未来版本中,我将阅读:

 let generatePowerOfFunc baseValue = (fun exponent -> baseValue ** exponent);;
Run Code Online (Sandbox Code Playgroud)