我试图为O'Railey,Chris Smith第53页编写F#编程。
正在使用函数返回函数。
直接来自VS2013 IDE编辑器中的书,FSI和LinqPad4都出错了:
代码:
let generatePowerOfFunc base = (fun exponent -> base ** exponent)
错误:
error FS0010: Unexpected keyword 'base' in pattern
我缺少什么,或者作者没有包含哪些内容需要包括在内。
答案 0 :(得分:6)
我强烈怀疑这本书只是base
不是关键词的问题。
尝试使用其他标识符:
let generatePowerOfFunc b = (fun exponent -> b ** exponent)
假设您已经获得了2009版的F#编程,那将是在F#2.0发布之前(尽管在1.0之后)。我试图找出它作为关键字引入的确切时间......
编辑:实际上,看一下2009年写的this version of the spec,看起来base
已经是关键词了。我想知道在本书出版之前原始代码是否写得很明显。
无论哪种方式,我认为将它基本上视为错误是合理的,而使用有效的标识符应该没问题。
编辑:它实际上列在book's errata:
中示例3-3在VS 2010中不能正常工作。“base”显然是一个关键字,因此它应该被转义或者有一些巫术使它不是我在书中遗漏的关键字。示例的第2行应如下所示:
let generatePowerOfFunc ``base`` = (fun exponent -> ``base`` ** exponent);;
或者,应选择不同的变量名称。
作者或编辑的注意事项:
感谢您的反馈,我一定错过了在产品周期后期标记为保留的关键字。在本书的未来版本中,我会读到:
let generatePowerOfFunc baseValue = (fun exponent -> baseValue ** exponent);;
答案 1 :(得分:3)
base
是一个关键字,指的是父类。
您可以使用以下双击:
let generatePowerOfFunc ``base`` = (fun exponent -> ``base`` ** exponent);;
或者只是将参数的名称更改为其他名称。