zoukankan      html  css  js  c++  java
  • 维基F#译文: 值与函数(上)

    原文地址:http://en.wikibooks.org/wiki/F_Sharp_Programming

    1. 声明变量

    1.1 值是值,变量是变量

    在F#里最常见的关键字就是let,用来声明变量或是函数。 举例如下:

    let x = 5
    let y = 10
    let z = x + y

     这样就声明了x,y,然后分别赋值。最后z等于x加y的值。 然后你可以再把它们打印出来

    printfn "x: %i" x
    printfn "y: %i" y
    printfn "z: %i" z

     最后输出的结果是什么,到FSI里试下就知道了。 记得不要忘记,在FSI里要在程序的最后加两个分号,这样才能执行你的程序。

    最后再来看下值和变量的区别。

    let w = 5

     这里先定义w等于5。好了,现在你再把6赋值给w,看看会发生什么!

    w = 6
    
    val it : bool = false

    这里的=等已经不再是赋值操作了,而是对比。这里其实就是说,w的值是5,现在说,5是不是等于6,显然不等,所以返回了一个布尔值,假(FALSE).

    所以如果你要给w赋值的话,应该如前面说的那样用let。

    let w = 100

     但其实这样并不是真正的赋值,他只是给w重新绑定过了一个值,而不是找到内存中原来w的值,也就是5,然后把5修改为100。那如果我要真正的改这个值呢,那就得用 <-

    w <- 99

    但是这样你会得到一个错误

    error FS0027: This value is not mutable

    F#说这个值是不可变的。原来在F#里,其实应该说要函数式编程语言里,变量其实都是不可变。所以你会得到这个这个错误。那你也许就会问,<- 这个操作岂不是没用的?其实F#是一种多重范式的语言,它是支持真正的变量的。但是它默认你声明的变量是不可变的(immutable)。那我们怎么声明可变的变量,这里就要用到另一个关键字 mutable

    let mutable i = 100;;
    
    val mutable i : int = 100

    这样就定义一个可变变量i,现在你再给i赋值

    i <- 999;;
    val it : unit = ()
    i;;
    val it : int = 999

    为什么函数式语言的变量是不可变的?简单来说,这其实函数式语言的优势,现在来说可能很难理解。以后自然会明白,不过好在F#并不是纯的函数式语言,要不然可能上手的难度会大很多。

  • 相关阅读:
    完整的开源和商业软件平台
    免费开源的文件比较/合并工具
    Javascript面向对象基础
    Javascript面向对象基础
    引入外部js获取dom为null的问题
    闭包函数
    初识对象
    构造函数
    内置对象
    Math对象
  • 原文地址:https://www.cnblogs.com/tuwenmin/p/2649211.html
Copyright © 2011-2022 走看看