本文包括描述 F# 中使用的符号和运算符的表,并提供每个符号的简要说明。 某些符号和运算符在多个角色中使用时具有两个或多个条目。
注释、编译器指令和属性符号
下表描述了与注释、编译器指令和属性相关的符号。
符号或运算符 | 链接 | DESCRIPTION |
---|---|---|
(*...*) |
分隔可跨多行的注释。 | |
// |
指示单行注释的开头。 | |
/// |
XML 文档 | 指示 XML 注释。 |
# |
编译器指令 | 前缀预处理器或编译器指令。 |
[<...>] |
属性 | 分隔属性。 |
字符串和标识符符号
下表描述了与字符串相关的符号。
符号或运算符 | 链接 | DESCRIPTION |
---|---|---|
" |
字符串 | 分隔文本字符串。 |
@" |
字符串 | 启动一个逐字文本字符串,该字符串可能包括反斜杠和其他字符。 |
""" |
字符串 | 分隔三引号文本字符串,该字符串可能包括反斜杠、双引号和其他字符。 |
$" |
内插字符串 | 启动内插字符串。 |
' |
文本 | 分隔单个字符文本。 |
``...`` |
分隔其他情况下不是法律标识符的标识符,例如语言关键字。 | |
\ |
字符串 | 转义下一个字符;用于字符和字符串文本。 |
算术运算符
下表描述了算术运算符。
符号或运算符 | 链接 | DESCRIPTION |
---|---|---|
+ |
算术运算符 |
|
- |
算术运算符 |
|
* |
算术运算符 元组 度量单位 |
|
/ |
算术运算符 度量单位 |
|
% |
算术运算符 | 计算整数余数。 |
** |
算术运算符 | 计算指数运算(x ** y 表示 x 幂 y )。 |
比较运算符
下表描述了比较运算符。
符号或运算符 | 链接 | 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 表达式 | 在匹配表达式中使用。 |
& |
模式匹配 |
|
_ |
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 |
非关联 |
function 、fun 、match 、try |
非关联 |
if |
非关联 |
not |
正确 |
-> |
正确 |
:= |
正确 |
, |
非关联 |
or 、|| |
左边 |
& 、&& |
左边 |
:> 、:?> |
正确 |
<
op、> op、= 、| op、& op、、 & $ (包括 <<< , >>> , ||| &&& ) |
左边 |
^
op(包括 ^^^ ) |
正确 |
:: |
正确 |
:? |
不关联 |
-
op、 + op |
适用于这些符号的内缀用法 |
*
op、 / op、 % op |
左边 |
**
op |
正确 |
f x (函数应用程序)(包括 lazy x , assert x ) |
左边 |
| (模式匹配) |
正确 |
prefix 运算符(+ op、op、- 、%% % 、& && 、! op、 ~ op) |
左边 |
. |
左边 |
f(x) |
左边 |
f<
类型> |
左边 |
F# 支持自定义运算符重载。 这意味着可以定义自己的运算符。 在上表中, op 可以是任何有效的(可能为空)运算符字符序列,可以是内置字符或用户定义的字符。 因此,可以使用此表来确定要用于自定义运算符的字符序列,以实现所需的优先级别。 当编译器确定优先级时,将忽略前导 .
字符。