F# 符号和运算符参考(MSDN)

下表描述 F# 语言中使用的符号,简要介绍符号的一些用途,并提供更多信息的链接。 符号按 ASCII 字符集顺序排序。

符号和运算符表
符号或运算符链接描述
! 引用单元格

计算表达式
  • 取消引用引用单元格。
  • 在关键字后,指示由工作流控制的关键字行为的修改版本。
!=  
  • F# 中不使用。 使用 <> 进行不等运算。
" 文字

字符串
  • 分隔文本字符串。
""" 字符串 分隔逐字文本字符串。 区别你可以在字符串中使用单引号来指示引号字符的 @"..."
# 编译器指令

可变类型
  • 给预处理器指令或编译器指令加上前缀,如 #light
  • 当用于类型时,指示“灵活类型”,即某一类型或该类型的任何一个派生类型。
$  
  • 在内部用于特定编译器生成的变量和函数名称。
% 算术运算符

代码引用
  • 计算整数余数。
  • 用于将表达式拼接到类型化的代码引号中。
%% 代码引用
  • 用于将表达式拼接到非类型化的代码引号中。
%? 可以为 null 的运算符
  • 当右侧是可以为 null 的类型时,计算整数余数。
& Match 表达式
  • 计算可变值的地址,以便在与其他语言进行互操作时使用。
  • 在“与”模式下使用。
&& 布尔运算符
  • 计算“布尔与”运算。
&&& 位运算符
  • 计算“位与”运算。
' 文字

自动泛化
  • 分隔单字符文本。
  • 指示泛型类型参数。
``...``  
  • 分隔标识符,否则它将不是合法的标识符,如语言关键字。
( ) unit 类型
  • 表示单位类型的单个值。
(...) 元组

运算符重载
  • 指示表达式的计算顺序。
  • 分隔元组。
  • 在运算符定义中使用。
(*...*)  
  • 分隔跨多行的注释。
(|...|) 活动模式
  • 分隔活动模式。 也称为“香蕉夹”。
* 算术运算符

元组

度量单位
  • 当用作二元运算符时,使左右两侧相乘。
  • 在类型中,指示元组中的配对。
  • 用于度量单位类型。
*? 可以为 null 的运算符
  • 当右侧是可以为 null 的类型时,使左右两侧相乘。
** 算术运算符
  • 计算幂运算(x ** y 表示 x 的 y 次方)。
+ 算术运算符
  • 当用作二元运算符时,使左右两侧相加。
  • 当用作二元运算符时,指示正数。 (正式情况下,它生成相同的值且符号保持不变。)
+? 可以为 null 的运算符
  • 当右侧是可以为 null 的类型时,使左右两侧相加。
, 元组
  • 分隔元组的元素或类型参数。
- 算术运算符
  • 当用作二元运算符时,使左侧减去右侧。
  • 当用作二元运算符时,执行求反运算。
-? 可以为 null 的运算符
  • 当右侧是可以为 null 的类型时,使左侧减去右侧。
-> 函数

Match 表达式
  • 在函数类型中,分隔自变量和返回值。
  • 生成表达式(序列表达式);等效于 yield 关键字。
  • 在匹配表达式中使用
. 成员

基元类型
  • 访问成员并分隔完全限定名称中的各个名称。
  • 指定浮点数中的小数点。
.. 循环:for...in 表达式
  • 指定范围。
.. .. 循环:for...in 表达式
  • 指定范围和增量。
.[...] 数组
  • 访问数组元素。
/ 算术运算符

度量单位
  • 使左侧(分子)除以右侧(分母)。
  • 用于度量单位类型。
/? 可以为 null 的运算符
  • 当右侧是可以为 null 的类型时,使左侧除以右侧。
//  
  • 指示单行注释的开头。
/// XML 文档
  • 指示 XML 注释。
: 函数
  • 在类型批注中,用于将参数或成员名称与其类型分隔开来。
:: 列表

Match 表达式
  • 创建列表。 将左侧的元素追加到右侧的列表。
  • 在模式匹配中用于分隔列表的各个部分。
:= 引用单元格
  • 对引用单元格赋值。
:> 强制转换和转换
  • 将类型转换为层次结构中级别更高的类型。
:? Match 表达式
  • 如果值与指定类型(包括子类型)匹配,则返回 true;否则,返回 false(类型测试运算符)。
:?> 强制转换和转换
  • 将类型转换为层次结构中级别更低的类型。
; 详细语法

列表

记录
  • 分隔表达式(主要用于详细语法)。
  • 分隔列表中的元素。
  • 分隔记录的字段。
< 算术运算符
  • 计算“小于”运算。
<? 可以为 null 的运算符 当右侧是可以为 null 的类型时,计算“小于”运算。
<< 函数
  • 以相反的顺序组合两个函数;先执行第二个函数(反向组合运算符)。
<<< 位运算符
  • 将左侧的位数向左移动右侧指定的位数。
<-
  • 对变量赋值。
<...> 自动泛化
  • 分隔类型参数。
<> 算术运算符
  • 如果左侧不等于右侧,则返回 true;否则,返回 false。
<>? 可以为 null 的运算符
  • 当右侧是可以为 null 的类型时,计算“不等于”运算。
<= 算术运算符
  • 如果左侧小于或等于右侧,则返回 true;否则返回 false
<=? 可以为 null 的运算符
  • 当右侧是可以为 null 的类型时,计算“小于或等于”运算。
|> 函数
  • 将左侧表达式的结果传递给右侧的函数(前置竖线运算符)。
||> ( ||> )<'T1,'T2,'U> 函数
  • 将左侧两个自变量的元组传递给右侧的函数。
|||> ( |||> )<'T1,'T2,'T3,'U> 函数
  • 将左侧三个自变量的元组传递给右侧的函数。
<| 函数
  • 将左侧表达式的结果传递给右侧的函数(后置竖线运算符)。
<|| ( <|| )<'T1,'T2,'U> 函数
  • 将右侧两个自变量的元组传递给左侧的函数。
<||| ( <||| )<'T1,'T2,'T3,'U> 函数
  • 将右侧三个自变量的元组传递给左侧的函数。
<@...@> 代码引用
  • 分隔类型化代码引号。
<@@...@@> 代码引用
  • 分隔非类型化代码引号。
= 算术运算符
  • 如果左侧等于右侧,则返回 true;否则返回 false
=? 可以为 null 的运算符
  • 当右侧是可以为 null 的类型时,计算“等于”运算。
==  
  • F# 中不使用。 使用 = 进行相等运算。
> 算术运算符
  • 如果左侧大于右侧,则返回 true;否则返回 false
>? 可以为 null 的运算符
  • 当右侧是可以为 null 的类型时,计算“大于”运算。
>> 函数
  • 组合两个函数(正向组合运算符)。
>>> 位运算符
  • 将左侧的位数向右移动右侧指定的位数。
>= 算术运算符
  • 如果左侧大于或等于右侧,则返回 true;否则返回 false
>=? 可以为 null 的运算符
  • 当右侧是可以为 null 的类型时,计算“大于或等于”运算。
? 形参和实参
  • 指定可选自变量。
  • 用作动态方法和属性调用的运算符。 你必须提供自己的实现。
? ... <- ...  
  • 用作设置动态属性的运算符。 你必须提供自己的实现。
?>=?>?<=?<?=?<>?+?-?*?/ 可以为 null 的运算符
  • 如果左侧是可以为 null 的类型,等效于不带 ? 前缀的对应运算符。
>=?>?<=?<?=?<>?+?-?*?/? 可以为 null 的运算符
  • 如果左侧是可以为 null 的类型,等效于不带 ? 后缀的对应运算符。
?>=??>??<=??<??=??<>??+??-??*??/? 可以为 null 的运算符
  • 如果两侧都是可以为 null 的类型,等效于周围没有问号的对应运算符。
@ 列表

字符串
  • 连接两个列表。
  • 当放置在字符串文本之前时,指示将逐字解释字符串,而不会解释转义符。
[...] 列表
  • 分隔列表中的元素。
[|...|] 数组
  • 分隔数组中的元素。
[<...>] 特性
  • 分隔特性。
\ 字符串
  • 对下一个字符转义,在字符和字符串文本中使用。
^ 静态解析的类型参数

字符串
  • 指定在编译时(而非运行时)必须解析的类型参数。
  • 连接字符串。
^^^ 位运算符
  • 计算“位异或”运算。
_ Match 表达式

泛型
  • 指示通配符模式。
  • 指定匿名泛型参数。
` 自动泛化
  • 在内部用于指示泛型类型参数。
{...} 序列

记录
  • 分隔序列表达式和计算表达式。
  • 在记录定义中使用。
| Match 表达式
  • 分隔单个匹配用例、单个可区分联合用例和枚举值。
|| 布尔运算符
  • 计算“布尔或”运算。
||| 位运算符
  • 计算“位或”运算。
~~ 运算符重载
  • 用于声明一元求反运算符的重载。
~~~ 位运算符
  • 计算“位非”运算。
~- 运算符重载
  • 用于声明一元减运算符的重载。
~+ 运算符重载
  • 用于声明一元加运算符的重载。

运算符优先级

下表显示 F# 语言中运算符及其他表达式关键字的优先顺序,从最低优先级到最高优先级。 适当时,还会列出关联性。

运算符优先级
运算符结合性
as Right
when Right
|(竖线) Left
; Right
let 不相关
functionfunmatchtry 不相关
if 不相关
not Right
-> Right
:= Right
, 不相关
or|| Left
&&& Left
:>:?> Right
<op, >op, =|op, &op, &

(包括 <<<>>>|||&&&
Left
^op

(包括 ^^^
Right
:: Right
:? 未关联
-op+op 适用于最为这些符号的中缀使用
*op/op%op Left
**op Right
f x(函数应用程序) Left
|(模式匹配) Right
前缀运算符(+op-op%%%&&&``!op~op Left
. Left
f(x) Left
f<types> Left

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

posted @ 2020-09-29 11:40  雨与鱼与羽  阅读(1518)  评论(0)    收藏  举报