符號和運算子參考

本文包含的表格會描述 F# 中使用的符號和運算子,並提供每個符號的簡短描述。 某些符號和運算子在多個角色中使用時,會有兩或多個項目。

註解、編譯器指示詞和屬性符號

下表描述與註解、編譯器指示詞和屬性相關的符號。

符號或運算子 連結 描述
(*...*) 分隔無法跨越多行的註解。
// 表示單行註解的開頭。
/// XML 文件 表示 XML 註解。
# 編譯器指示詞 開頭前置處理器或編譯器指示詞。
[<...>] 屬性 分隔屬性。

字串和識別碼符號

下表描述與字串相關的符號。

符號或運算子 連結 描述
" 字串 分隔文字字串。
@" 字串 啟動逐字文字字串,其可能包含反斜線和其他字元。
""" 字串 分隔三引號文字字串,其中可能包含反斜線、雙引號和其他字元。
$" 字串插值 開始插入字串。
' 常值 分隔單一字元常值。
``...`` 分隔若在其他狀況下不會是合法識別項的識別項,例如語言關鍵字。
\ 字串 逸出下一個字元;用於字元和字串常值中。

算術運算子

下表描述可用的算數運算子。

符號或運算子 連結 描述
+ 算術運算子
  • 當做二元運算子使用時,將左側與右側相加。
  • 當做一元運算子使用時,表示正數量。 (正式地說,它會產生正負號維持不變的相同值。)
- 算術運算子
  • 當做二元運算子使用時,從左側減去右側。
  • 當做一元運算子使用時,執行負運算。
* 算術運算子

元組

測量單位
  • 當做二元運算子使用時,將左側與右側相乘。
  • 在類型中,表示在 Tuple 中配對。
  • 用於測量單位類型中。
/ 算術運算子

測量單位
  • 左側 (分子) 除以右側 (分母)。
  • 用於測量單位類型中。
% 算術運算子 計算整數餘數。
** 算術運算子 計算乘冪運算 (x ** y 表示 xy 次方)。

比較運算子

下表描述比較運算子。

符號或運算子 連結 描述
< 算術運算子 計算小於運算。
<> 算術運算子 如果左側不等於右側,即傳回 true;否則,傳回 false。
<= 算術運算子 如果左側小於或等於右側,即傳回 true;否則傳回 false
= 算術運算子 如果左側等於右側,即傳回 true;否則傳回 false
> 算術運算子 如果左側大於右側,即傳回 true;否則傳回 false
>= 算術運算子 如果左側大於或等於右側,即傳回 true;否則傳回 false

布林運算子

下表描述算術和布林運算子符號。

符號或運算子 連結 描述
&& 布林運算子 計算布林值 AND 運算。
|| 布林運算子 計算布林值 OR 運算。

位元運算子

下表描述位元運算子。

符號或運算子 連結 描述
&&& 位元運算子 計算位元 AND 運算。
<<< 位元運算子 將左側中數量中的位元,向左移位右側所指定的位元數。
>>> 位元運算子 將左側數量中的位元,向右移位右側指定的位數。
^^^ 位元運算子 計算位元互斥 OR 運算。
||| 位元運算子 計算位元 OR 運算。
~~~ 位元運算子 計算位元 NOT 運算。

函式符號和運算子

下表描述與函式相關的運算子和符號。

符號或運算子 連結 描述
-> 函數 在函式運算式中,將輸入模式與輸出運算式分開。
|> 函數 將左側的結果傳遞至右側的函式 (正向管道運算子)。
||> ( ||> )<'T1,'T2,'U> 函式 將左側兩個引數的 Tuple 傳遞至右側的函式。
|||> ( |||> )<'T1,'T2,'T3,'U> 函式 將左側三個引數的 Tuple 傳遞至右側的函式。
>> 函數 撰寫兩個函式 (正向撰寫運算子)。
<< 函數 以相反順序撰寫兩個函式;第二個函式會先執行 (反向撰寫運算子)。
<| 函數 將右側的運算結果傳遞至左側的函式 (反向管道運算子)。
<|| ( <|| )<'T1,'T2,'U> 函式 將右側兩個引數的 Tuple 傳遞至左側的函式。
<||| ( <||| )<'T1,'T2,'T3,'U> 函式 將右側三個引數的 Tuple 傳遞至左側的函式。

型別符號和運算子

下表描述與型別註釋和型別測試相關的符號。

符號或運算子 連結 描述
-> 函數 在函式型別中,分隔引數和傳回值,也會在序列運算式中產生結果。
: 函數 在類型註釋中,將參數或成員名稱與其類型分隔。
:> 轉型和轉換 將類型轉換成階層中較高階的類型。
:? 比對運算式 如果值符合指定的型別 (包括其為子型別),即傳回 true;否則傳回 false (型別測試運算子)。
:?> 轉型和轉換 將類型轉換成階層中較低階的類型。
# 彈性類型 與類型一起使用時,表示「彈性類型」,這指的是類型或任何一種其衍生的類型。
' 自動一般化 表示泛型類型參數。
<...> 自動一般化 分隔型別參數。
^ 以統計方式解析的型別參數

字串
  • 指定必須在編譯階段 (而非執行階段) 解析的型別參數。
  • 串連字串。
{} 類別記錄 搭配 type 關鍵字使用時,會分隔類別或記錄。 當宣告成員或使用 class 關鍵字時,該型別是類別。 否則是一筆記錄。
{||} 匿名記錄 表示匿名記錄

成員查閱和配量運算式中使用的符號

下表描述成員查閱和配量運算式中使用的其他符號。

符號或運算子 連結 描述
. 成員 存取成員,並分隔完整名稱中的個別名稱。
[...].[...] 陣列

索引屬性

配量運算式
索引到陣列、字串或集合,或接受集合的配量。

元組、清單、陣列、單位運算式和模式中使用的符號

下表描述與元組、清單、單位值和陣列相關的符號。

符號或運算子 連結 描述
( ) 單位類型 代表單位類型的單一值。
, 元組 分隔 Tuple 的項目或型別參數。
:: 清單

比對運算式
  • 建立清單。 左側的項目會附加到右側清單的前面。
  • 用於模式比對中以分隔清單的組件。
@ 清單 串連兩個清單。
[...] 清單 分隔清單的元素。
[|...|] 陣列 分隔陣列的元素。

命令式運算式中使用的符號

下表描述運算式中使用的其他符號。

符號或運算子 連結 描述
<- 將值指派給變數。
; 詳細語法

分隔運算式 (大部分用於詳細語法中)。 也會分隔記錄清單或欄位的元素。

序列和計算運算式中使用的其他符號

下表描述序列計算運算式中使用的其他符號。

符號或運算子 連結 描述
-> 序列 產生運算式 (在循序項運算式中);相當於 do yield 關鍵字。
! 計算運算式 在關鍵字後面,代表由計算運算式所控制的關鍵字行為的修改版本。

比對模式中使用的其他符號

下表描述與模式比對相關的符號。

符號或運算子 連結 描述
-> 比對運算式 用於比對運算式中。
& 模式比對
  • 計算可變動值的位址,以在與其他語言相互操作時使用。
  • 用於 AND 模式中。
_ 比對運算式

泛型
  • 表示萬用字元模式。
  • 指定匿名泛型參數。
| 比對運算式 分隔各個相符的情況、個別差別聯集宣告和列舉值。

宣告中使用的其他符號

下表描述與宣告相關的符號。

符號或運算子 連結 描述
(|...|) 現用模式 分隔使用中的模式名稱。 也稱為「香蕉夾」
? 參數和引數 指定選擇性引數。
~~ 運算子多載 用以宣告一元負運算子的多載。
~- 運算子多載 用以宣告一元相減運算子的多載。
~+ 運算子多載 用以宣告一元相加運算子的多載。

引號中使用的其他符號

下表描述與程式碼引號相關的符號。

符號或運算子 連結 描述
<@...@> 程式碼引號 分隔具類型的程式碼引號。
<@@...@@> 程式碼引號 分隔不具類型的程式碼引號。
% 程式碼引號 用於將運算式接合成具類型的程式碼引號。
%% 程式碼引號 用於將運算式接合成不具類型的程式碼引號。

動態查閱運算子

下表描述動態查閱運算式中使用的其他符號。 它們通常不會用於例行的 F# 程式設計,而且 F# 核心程式庫中不會提供這些運算子的實作。

符號或運算子 連結 描述
? 用做為動態方法及屬性呼叫的運算子。
? ... <- ... 用來做為設定動態屬性的運算子。

查詢中可為 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 的類型在右側。
?>=?, ?>?, ?<=?, ?<?, ?=?, ?<>?, ?+?, ?-?, ?*?, ?/? 可為 Null 的運算子 相當於沒有問號括住的對應運算子,其兩側都是可為 null 的類型。

參考資料格運算子 (已被取代)

下表描述與參照資料格相關的符號。 使用這些運算子自 F# 6 起會產生諮詢訊息。 如需詳細資訊,請參閱參考資料格作業諮詢訊息

符號或運算子 連結 描述
! 參考儲存格 取值參考儲存格。
:= 參考儲存格 將值指派給參考儲存格。

運算子優先順序

下表顯示 F# 語言中運算子和其他運算式關鍵字的優先順序,順序從最低的優先順序到最高的優先順序。 同時列出關聯性 (如果適用的話)。

運算子 關聯性
as Right
when Right
| (管道) Left
; Right
let Nonassociative
function, fun, match, try Nonassociative
if Nonassociative
not Right
-> Right
:= Right
, Nonassociative
or|| Left
&&& Left
:>:?> Right
<op>op=|op&op&$

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

(包括 ^^^)
Right
:: Right
:? 未關聯
-op+op 適用於這些符號的中置用法
*op/op%op Left
**op Right
f x (函式應用程式)

(包括 lazy xassert x)
Left
| (模式比對) Right
前置運算子 (+op-op%%%&&&!op~op) Left
. Left
f(x) Left
f<類型> Left

F# 支援自訂運算子多載。 這表示您可以定義自己的運算子。 在上表中,op 可以是任何有效的 (可能是空的) 運算子字元序列,即內建或使用者定義的序列。 因此,您可以使用此表格來判斷要對自訂運算子使用什麼字元序列,以達到您想要的優先順序等級。 前置 . 字元在編譯器判斷優先順序時,會予以忽略。

另請參閱