说是翻译吧,也不能说是翻译,最多算是在看这本书的时候做的一些简单记录。
因为其中加入了自己的一些理解,也跳过了许多东西,
所以说不定某些重要的知识点也没讲到,希望不会误导到其他人吧,哈。
第一章
标识符
在F#中你可以使用 let 来定义一个 标识符 并赋予他一个值、对象或是表达式。
如:
在许多有编程背景的人眼中,会觉得:“这不就是一个变量嘛,还用你说?“
如果这个跟变量一样,那我就不会拿出来说了,之所以叫标识符,是因为在定义之后,他的值是不可变的。
但在之后的 Scope(作用范围) 中会讲到,在某些情况下,你可以重定义标识符,使他的值能够改变。
标识符可以看成是变量,也可以看成是一个函数/方法,这意味着在F#中,不能确切的定义方法名、参数名,他们仅仅是一个标识符而已。
你可以像定义一个变量一样去定义一个函数,只有一点区别,就是函数在let与等号之间具有两个或以上的标识符。
如:
第一个标识符是这个函数的名字,raisePowerTow,接着的是它的参数,x。
Values and Functions
在F#中Values跟functions是无法区分的,因为functions就是values,F#的语法也把他们定义得非常相似。
现在可以看到他们的语法是多么的相似了。唯一的区别就是,如果是函数的话,在函数名的后面跟了两个参数a跟b.
你还可以发现,在这里add不需要明确的说明需要return什么,需要返回的类型,推断系统已经搞定了。
Example:
F#同时也支持 局部函数( sometimes called partial or curried functions)
这意味着你不需要一次把函数需要的参数全部输入了,就如上面的实例:
这是一个很好的证明:函数即是值(Function are Values)
因为Function 就是 Values,所以当函数没有接收到需要的所有参数时,他返回的是一个新的准备接受剩余参数的函数
如:
运行后可以看到:
但这种行为也并不是永远有效,比如一个函数需要用两个浮点数(float)的参数来表示一个point,
如:
编译器将提示:
一般来说,你永远不会需要自己去明确的返回一个值,但如果是在一个函数里面呢?在F#中,这依赖与空格,
但一般我更倾向于tab,在同一个tab之中,你键入的所有内容,仍处于这个函数的范围呢,这样就可以确定你需要返回的是什么了,
如:
最终的结果是:
暂时到这里。