F#選項(xiàng)

2018-12-15 11:32 更新

當(dāng)計(jì)算中使用F#中的選項(xiàng)類型時(shí),可能存在或可能不存在變量或函數(shù)的值。 選項(xiàng)類型用于在計(jì)算中表示可選值。 它們可以有兩個(gè)可能的值 - 一個(gè)(x)或無(wú)。
例如,執(zhí)行除法的函數(shù)將在正常情況下返回值,但在零分母的情況下將拋出異常。 在此處使用選項(xiàng)將有助于指示函數(shù)是成功還是失敗。
一個(gè)選項(xiàng)具有底層類型,并且可以保存該類型的值,或者它可能沒(méi)有值。

使用選項(xiàng)

讓我們來(lái)分割功能的例子。下面的程序說(shuō)明了這一點(diǎn) -

讓我們寫(xiě)一個(gè)函數(shù)div,并發(fā)送兩個(gè)參數(shù)給它20和5 

let div x y = x / y
let res = div 20 5
printfn "Result: %d" res

當(dāng)你編譯和執(zhí)行程序,它產(chǎn)生以下輸出 

Result: 4

如果第二個(gè)參數(shù)為0,則程序拋出一個(gè)異常 

let div x y = x / y
let res = div 20 0
printfn "Result: %d" res

當(dāng)你編譯和執(zhí)行程序,它產(chǎn)生以下輸出 

Unhandled Exception:
System.DivideByZeroException: Division by zero

在這種情況下,我們可以使用的選項(xiàng)類型返回一些(值)時(shí),操作成功或None如果操作失敗。

下面的例子演示了如何使用的選項(xiàng) 

實(shí)例

let div x y =
   match y with
   | 0 -> None
   | _ -> Some(x/y)

let res : int option = div 20 4
printfn "Result: %A " res

當(dāng)你編譯和執(zhí)行程序,它產(chǎn)生以下輸出 

Result: Some 5

選項(xiàng)的屬性和方法

選項(xiàng)類型支持以下屬性和方法 

屬性或方法類型描述
None'T option靜態(tài)屬性,使您能夠創(chuàng)建具有None值的選項(xiàng)值。
IsNonebool如果該選項(xiàng)的none,則返回true。
IsSomebool如果該選項(xiàng)的值是不無(wú)返回true。
Some'T option一個(gè)靜態(tài)成員,它創(chuàng)建一個(gè)值為notNone的選項(xiàng)。
Value'T返回基礎(chǔ)值,如果值為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

當(dāng)你編譯和執(zhí)行程序,它產(chǎn)生以下輸出 

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

當(dāng)你編譯和執(zhí)行程序,它產(chǎn)生以下輸出 

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)

當(dāng)你編譯和執(zhí)行程序,它產(chǎn)生以下輸出 

false
true
false
以上內(nèi)容是否對(duì)您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號(hào)
微信公眾號(hào)

編程獅公眾號(hào)