当前位置: 首页 > news >正文

【F#学习】“变量”?绑定!

绑定

在F#中,给一个值标记上名字的过程叫作绑定binding)。绑定是不可更改的,就像C#语言中的readonly或者const一样。因此,我们称这样的东西为绑定而非变量。由于F#是静态类型语言,所有的绑定必须在编译期就明确类型。

通过关键字let来创建绑定。在大多数情况下,编译器足够聪明,能够推断出绑定的类型。(学习了type关键字之后,你就会惊叹编译器已经聪明到难以想象的程度了!)

// 自动类型推断
let fingers = 10

函数其实也是普普通通的绑定,只不过带有参数而已。函数的最后一行会作为他的返回值。无论是函数参数,还是函数的返回值,编译器都会尽量地去自动推断。

// 如下的两个函数完全相同
let add x y = x + y
let add (x: int) (y: int) :int = x + y

类似于Haskell,调用函数的时候不需要括号和逗号。这点和C#有很大的不同,但你很快就会接受的。

let five = add 2 3

当编译器无法推断类型的时候,必须使用冒号:来明确标注类型。(这种情况非常之罕见!当然,在任何情况下,你都可以明确标注类型。)

let fingers: int = 10
let add (x: int) (y: int): int = x + y

必须先定义绑定才能使用。这似乎类似于C++,毕竟在C++里,函数也必须先声明再使用。

// 这么做会无法通过编译。报错。
let seven = add 3 4
let add x y = x + y

在F#中,缩进是重要的,就像Python一样。

let toes =let left = 5let right = 5left + rightlet multiplyPlusTwo x y =let product = x * yproduct + 2

F#的绑定一般在module(类似于C#的static class)下进行。

module Calculatorlet pi = 3.14
let add x y = x + y

可变绑定(let mutable variable = ...)暂不介绍。

http://www.rkmt.cn/news/8290.html

相关文章:

  • 实用指南:容器逃逸漏洞
  • 深入解析:卷对卷(Roll-to-Roll,R2R)技术的应用领域和技术进展
  • 分享一个极度精简的绿色的 五笔输入法
  • CSP-J/S 2025 游记
  • 完整教程:数据结构:单链表的应用(力扣算法题)第二章
  • CF2039E Shohag Loves Inversions
  • 深入解析:sqlite3的加解密全过程
  • U522155 板垣 カノエ is WATCHING YOU std
  • ctfshow web
  • 代码随想录算法训练营第三天 | leetcode 203 707 206
  • 【F#学习】数组:Array
  • ctfshow 菜狗杯
  • 详细介绍:测试用例详解
  • conda 无法安装依赖 CondaHTTPError: HTTP 000 CONNECTION FAILED for url: tsinghua tencentaliyun
  • vulnhub(持续更新)
  • 小爱同学连接电脑进行交互 教程
  • 已完成今日求所有满足长为 $a$ 的和为 $b$ 的按位或为 $c$ 的非负整数序列的异或和的异或和大学习
  • 集群无法启动CRS-4124: Oracle High Availability Services startup failed - 指南
  • Hello Yqc!
  • SAPO去中心化训练:多节点协作让LLM训练效率提升94%
  • 区间问题
  • 解决 Ubuntu 25.04 下 make menuconfig 报 ncurses 错误的问题 - 指南
  • web359
  • 如何在后端优雅地生成并传递动态错误提示?
  • web358
  • WPF包
  • 实用指南:目标检测如何将同时有方形框和旋转框的json/xml标注转为txt格式
  • ctfshow web351
  • Linux虚拟机常用命令与Hadoop生态组件启动大全
  • private void Form1_Load与构造方法前执行顺序