- F# 基礎教程
- F# - 首頁
- F# - 概述
- F# - 環境搭建
- F# - 程式結構
- F# - 基本語法
- F# - 資料型別
- F# - 變數
- F# - 運算子
- F# - 決策
- F# - 迴圈
- F# - 函式
- F# - 字串
- F# - 可選項
- F# - 元組
- F# - 記錄
- F# - 列表
- F# - 序列
- F# - 集合
- F# - 對映
- F# - 辨析聯合
- F# - 可變資料
- F# - 陣列
- F# - 可變列表
- F# - 可變字典
- F# - 基本輸入/輸出
- F# - 泛型
- F# - 委託
- F# - 列舉
- F# - 模式匹配
- F# - 異常處理
- F# - 類
- F# - 結構體
- F# - 運算子過載
- F# - 繼承
- F# - 介面
- F# - 事件
- F# - 模組
- F# - 名稱空間
F# - 可選項
F# 中的可選項型別用於計算中變數或函式的值可能存在也可能不存在的情況。可選項型別用於表示計算中的可選值。它們可以有兩個可能的值 - Some(x) 或 None。
例如,執行除法的函式在正常情況下會返回一個值,但在分母為零的情況下會丟擲異常。在這裡使用可選項將有助於指示函式是否成功。
可選項具有底層型別,可以儲存該型別的值,或者可能沒有值。
使用可選項
讓我們以除法函式為例。下面的程式解釋了這一點:
讓我們編寫一個 div 函式,並向其傳送兩個引數 20 和 5:
let div x y = x / y let res = div 20 5 printfn "Result: %d" res
編譯並執行程式時,它會產生以下輸出:
Result: 4
如果第二個引數為零,則程式會丟擲異常:
let div x y = x / y let res = div 20 0 printfn "Result: %d" res
編譯並執行程式時,它會產生以下輸出:
Unhandled Exception: System.DivideByZeroException: Division by zero
在這種情況下,我們可以使用可選項型別,在操作成功時返回 Some (value),在操作失敗時返回 None。
以下示例演示了可選項的使用:
示例
let div x y = match y with | 0 -> None | _ -> Some(x/y) let res : int option = div 20 4 printfn "Result: %A " res
編譯並執行程式時,它會產生以下輸出:
Result: Some 5
可選項屬性和方法
可選項型別支援以下屬性和方法:
| 屬性或方法 | 型別 | 描述 |
|---|---|---|
| None | 'T option | 一個靜態屬性,使您可以建立一個具有None 值的可選項值。 |
| IsNone | bool | 如果可選項具有None值,則返回true。 |
| IsSome | bool | 如果可選項的值不是None,則返回true。 |
| Some | 'T option | 一個靜態成員,建立一個具有非None值的可選項。 |
| Value | 'T | 返回底層值,如果值為None,則丟擲 NullReferenceException。 |
示例 1
let checkPositive (a : int) =
if a > 0 then
Some(a)
else
None
let res : int option = checkPositive(-31)
printfn "Result: %A " res
編譯並執行程式時,它會產生以下輸出:
Result: <null>
示例 2
let div x y = match y with | 0 -> None | _ -> Some(x/y) let res : int option = div 20 4 printfn "Result: %A " res printfn "Result: %A " res.Value
編譯並執行程式時,它會產生以下輸出:
Result: Some 5 Result: 5
示例 3
let isHundred = function | Some(100) -> true | Some(_) | None -> false printfn "%A" (isHundred (Some(45))) printfn "%A" (isHundred (Some(100))) printfn "%A" (isHundred None)
編譯並執行程式時,它會產生以下輸出:
false true false
廣告