符号和运算符参考

本文包括描述 F# 中使用的符号和运算符的表,并提供每个符号的简要说明。 某些符号和运算符在多个角色中使用时具有两个或多个条目。

注释、编译器指令和属性符号

下表描述了与注释、编译器指令和属性相关的符号。

符号或运算符 链接 DESCRIPTION
(*...*) 分隔可跨多行的注释。
// 指示单行注释的开头。
/// XML 文档 指示 XML 注释。
# 编译器指令 前缀预处理器或编译器指令。
[<...>] 属性 分隔属性。

字符串和标识符符号

下表描述了与字符串相关的符号。

符号或运算符 链接 DESCRIPTION
" 字符串 分隔文本字符串。
@" 字符串 启动一个逐字文本字符串,该字符串可能包括反斜杠和其他字符。
""" 字符串 分隔三引号文本字符串,该字符串可能包括反斜杠、双引号和其他字符。
$" 内插字符串 启动内插字符串。
' 文本 分隔单个字符文本。
``...`` 分隔其他情况下不是法律标识符的标识符,例如语言关键字。
\ 字符串 转义下一个字符;用于字符和字符串文本。

算术运算符

下表描述了算术运算符。

符号或运算符 链接 DESCRIPTION
+ 算术运算符
  • 用作二进制运算符时,添加左侧和右侧。
  • 用作一元运算符时,指示正数。 (正式表示,它生成与符号不变的相同值。
- 算术运算符
  • 用作二进制运算符时,从左侧减去右侧。
  • 用作一元运算符时,执行求反运算。
* 算术运算符

元组

度量单位
  • 用作二进制运算符时,将左右两侧相乘。
  • 在类型中,指示元组中的配对。
  • 用于度量值类型的单位。
/ 算术运算符

度量单位
  • 将左侧(分子)除以右侧(分母)。
  • 用于度量值类型的单位。
% 算术运算符 计算整数余数。
** 算术运算符 计算指数运算(x ** y 表示 xy)。

比较运算符

下表描述了比较运算符。

符号或运算符 链接 DESCRIPTION
< 算术运算符 计算小于作。
<> 算术运算符 true如果左侧不等于右侧,则返回 false;否则返回 false。
<= 算术运算符 如果 true 左侧小于或等于右侧,则返回;否则返回 false
= 算术运算符 如果 true 左侧等于右侧,则返回;否则返回 false
> 算术运算符 true如果左侧大于右侧,则返回;否则返回 false
>= 算术运算符 true如果左侧大于或等于右侧,则返回;否则返回 false

布尔运算符

下表描述了算术和布尔运算符符号。

符号或运算符 链接 DESCRIPTION
&& 布尔运算符 计算布尔和运算。
|| 布尔运算符 计算布尔 OR作。

位运算符

下表描述了按位运算符。

符号或运算符 链接 DESCRIPTION
&&& 位运算符 计算按位 AND 运算。
<<< 位运算符 将左侧数量中的位按右侧指定的位数向左移动。
>>> 位运算符 将左侧数量中的位按右侧指定的位置数向右移动。
^^^ 位运算符 计算按位排他或运算。
||| 位运算符 计算按位 OR 运算。
~~~ 位运算符 计算按位 NOT 运算。

函数符号和运算符

下表描述了与函数相关的运算符和符号。

符号或运算符 链接 DESCRIPTION
-> 函数 在函数表达式中,将输入模式与输出表达式分开。
|> 函数 将左侧的结果传递给右侧的函数(正向管道运算符)。
||> ( ||> )<'T1,'T2,'U> 函数 将左侧两个参数的元组传递给右侧的函数。
|||> ( |||> )<'T1,'T2,'T3,'U> 函数 将左侧三个参数的元组传递给右侧的函数。
>> 函数 组合两个函数(正向合成运算符)。
<< 函数 按相反顺序组成两个函数;第二个执行第一个(向后合成运算符)。
<| 函数 将右侧表达式的结果传递给左侧的函数(向后管道运算符)。
<|| ( <|| )<'T1,'T2,'U> 函数 将右侧两个参数的元组传递给左侧的函数。
<||| ( <||| )<'T1,'T2,'T3,'U> 函数 将右侧三个参数的元组传递到左侧的函数。

类型符号和运算符

下表描述了与类型注释和类型测试相关的符号。

符号或运算符 链接 DESCRIPTION
-> 函数 在函数类型中,分隔参数和返回值,还会在序列表达式中生成结果。
: 函数 在类型批注中,将参数或成员名称与其类型分开。
:> 类型转换和转换 将类型转换为层次结构中较高类型的类型。
:? Match 表达式 如果 true 值与指定类型匹配(包括它是否为子类型);否则返回 false (类型测试运算符)。
:?> 类型转换和转换 将类型转换为层次结构中较低的类型。
# 灵活类型 与类型一起使用时,指示一个 灵活类型,该类型引用一个类型或其任何一个派生类型。
' 自动泛化 指示泛型类型参数。
<...> 自动泛化 分隔类型参数。
^ 静态解析的类型参数

字符串
  • 指定必须在编译时解析的类型参数,而不是在运行时解析。
  • 连接字符串。
{} 记录 与关键字一起使用 type 时,分隔类或记录。 当声明成员或使用 class 关键字时,该类型是类。 否则,它是一条记录。
{||} 匿名记录 表示匿名记录

成员查找和切片表达式中使用的符号

下表描述了成员查找和切片表达式中使用的其他符号。

符号或运算符 链接 DESCRIPTION
. 成员 访问成员,并在完全限定名称中分隔各个名称。
[...].[...] 数组

索引属性

切片表达式
索引到数组、字符串或集合中,或采用集合的切片。

元组、列表、数组、单元表达式和模式中使用的符号

下表描述了与元组、列表、单元值和数组相关的符号。

符号或运算符 链接 DESCRIPTION
( ) 单位类型 表示单位类型的单个值。
, 元组 分隔元组的元素或类型参数。
:: 列表

Match 表达式
  • 创建列表。 左侧的元素位于右侧的列表前面。
  • 用于模式匹配以分隔列表的各个部分。
@ 列表 连接两个列表。
[...] 列表 分隔列表的元素。
[|...|] 数组 分隔数组的元素。

命令性表达式中使用的符号

下表介绍了表达式中使用的其他符号。

符号或运算符 链接 DESCRIPTION
<- 价值观 向变量赋值。
; 详细语法

分隔表达式(主要用于详细语法)。 此外,分隔记录的列表或字段的元素。

序列和计算表达式中使用的其他符号

下表介绍了 序列计算表达式中使用的其他符号。

符号或运算符 链接 DESCRIPTION
-> 序列 生成表达式(在序列表达式中):等效于 do yield 关键字。
! 计算表达式 在关键字之后,指示由计算表达式控制的已修改版本的关键字行为。

匹配模式中使用的其他符号

下表描述了与模式匹配相关的符号。

符号或运算符 链接 DESCRIPTION
-> Match 表达式 在匹配表达式中使用。
& 模式匹配
  • 计算可变值的地址,以便在与其他语言进行互作时使用。
  • 用于 AND 模式。
_ Match 表达式

泛型
  • 指示通配符模式。
  • 指定匿名泛型参数。
| Match 表达式 分隔单个匹配事例、单个区分联合事例和枚举值。

声明中使用的其他符号

下表描述了与声明相关的符号。

符号或运算符 链接 DESCRIPTION
(|...|) 活动模式 分隔活动模式名称。 也称为 香蕉夹
? 参数和参数 指定可选参数。
~~ 运算符重载 用于声明一元求反运算符的重载。
~- 运算符重载 用于声明一元减号运算符的重载。
~+ 运算符重载 用于为一元加运算符声明重载。

引号中使用的其他符号

下表描述了与 代码引号相关的符号。

符号或运算符 链接 DESCRIPTION
<@...@> 代码引号 分隔类型化代码引号。
<@@...@@> 代码引号 分隔非类型化代码引号。
% 代码引号 用于将表达式合并为类型化代码引号。
%% 代码引号 用于将表达式合并为非类型化代码引号。

动态查找运算符

下表介绍了动态查找表达式中使用的其他符号。 它们通常不用于例程 F# 编程,并且 F# 核心库中不提供这些运算符的实现。

符号或运算符 链接 DESCRIPTION
? 用作动态方法和属性调用的运算符。
? ... <- ... 用作设置动态属性的运算符。

查询中可为 Null 的运算符

为 Null 运算符 定义,以便在 查询表达式中使用。 下表显示了这些运算符。

符号或运算符 链接 DESCRIPTION
%? 可以为 Null 的运算符 当右侧为可以为 null 的类型时,计算整数余数。
*? 可以为 Null 的运算符 当右侧是可以为 null 的类型时,将左侧和右侧相乘。
+? 可以为 Null 的运算符 当右侧是可以为 null 的类型时,添加左侧和右侧。
-? 可以为 Null 的运算符 当右侧为可以为 null 的类型时,从左侧减去右侧。
/? 可以为 Null 的运算符 当右侧是可以为 null 的类型时,将左侧除以右侧。
<? 可以为 Null 的运算符 当右侧为可以为 null 的类型时,计算小于作。
<>? 可以为 Null 的运算符 当右侧为可以为 null 的类型时,计算“不相等”作。
<=? 可以为 Null 的运算符 当右侧为可以为 null 的类型时,计算“小于或等于”作。
=? 可以为 Null 的运算符 当右侧为可以为 null 的类型时,计算“等于”作。
>? 可以为 Null 的运算符 当右侧为可以为 null 的类型时,计算“大于”作。
>=? 可以为 Null 的运算符 当右侧为可以为 null 的类型时,计算“大于或等于”作。
?>=?>?<=?<?=?<>?+?-?*?/ 可以为 Null 的运算符 等效于没有 ? 前缀,其中可为 null 的类型位于左侧。
>=?>?<=?<?=?<>?+?-?*?/? 可以为 Null 的运算符 等效于没有 ? 后缀,其中可为 null 的类型位于右侧。
?>=??>??<=??<??=??<>??+??-??*??/? 可以为 Null 的运算符 等效于没有周围问号的相应运算符,其中双方都是可以为 null 的类型。

引用单元格运算符 (已弃用)

下表描述了与 引用单元格相关的符号。 从 F# 6 起,使用这些运算符将生成公告消息。 有关详细信息,请参阅 参考单元格作公告消息

符号或运算符 链接 DESCRIPTION
! 引用单元格 取消引用引用单元格。
:= 引用单元格 将值分配给引用单元格。

运算符优先顺序

下表显示了 F# 中运算符和其他表达式关键字的优先级顺序,顺序从最低优先级到最高优先级。 此外,还列出了关联性(如果适用)。

操作员 结合性
as 正确
when 正确
| (管道) 左边
; 正确
let 非关联
functionfunmatchtry 非关联
if 非关联
not 正确
-> 正确
:= 正确
, 非关联
or|| 左边
&&& 左边
:>:?> 正确
< op>op=|op&op、、 &$

(包括<<<>>>|||&&&
左边
^ op

(包括 ^^^
正确
:: 正确
:? 不关联
- op+op 适用于这些符号的内缀用法
* op/op%op 左边
** op 正确
f x (函数应用程序)

(包括 lazy xassert x
左边
| (模式匹配) 正确
prefix 运算符(+opop-%%%&&&!op~ op) 左边
. 左边
f(x) 左边
f< 类型> 左边

F# 支持自定义运算符重载。 这意味着可以定义自己的运算符。 在上表中, op 可以是任何有效的(可能为空)运算符字符序列,可以是内置字符或用户定义的字符。 因此,可以使用此表来确定要用于自定义运算符的字符序列,以实现所需的优先级别。 当编译器确定优先级时,将忽略前导 . 字符。

另请参阅