F# 之 Unit 與 Ignore 簡介

栏目: ASP.NET · 发布时间: 6年前

内容简介:F# 是 FP,強調 function 都要有 input 值,也要有 return 值,若 function 真的沒有 input 值,也沒有 return 值,在 F# 該如何表示呢?FP 的思考來自於數學函數,認為 function 都要有但在電腦語言的 function,可能沒有 input 值,也可能沒有 return 值,這就與數學 function 不同,針對這種需求,F# 特別設計出新的型別

F# 是 FP,強調 function 都要有 input 值,也要有 return 值,若 function 真的沒有 input 值,也沒有 return 值,在 F# 該如何表示呢?

Unit 與 ()

FP 的思考來自於數學函數,認為 function 都要有 定義域對應域 ,如 y = f(x) ,也就是 input x 的型別就是 定義域 ,而 return y 的型別就是 對應域

但在電腦語言的 function,可能沒有 input 值,也可能沒有 return 值,這就與數學 function 不同,針對這種需求,F# 特別設計出新的型別 unit ,其值只有一個 ()

無 return

let print msg = printfn "%s" msg

print "Hello World"

print() 為 function,其內容只有 printfn() 印出 msg ,這就是典型 I/O 類的 side effect,但沒有 return 值。

F# 之 Unit 與 Ignore 簡介

若觀察 print() 的型別,其為 string -> unit ,也就是若沒 return 值,Type Inference 會推導為 unit

Q : 所以 unit 不就 C# 的 void

若以無 return 值的 function 觀點, unit 相當於 void 沒錯,但 unit 還有其他用途。

無 input

若想要建立 input() ,但不用傳入任何值,就可以印出 Hello World

直覺會這樣寫:

let print = printfn "%s" "Hello World"

但別忘了 F# 強調是 Function Value,也就是 function 也視為是一種 value,因此都使用 let

F# 之 Unit 與 Ignore 簡介

Type Inference 推導為 unit ,是 unit 型別的 value,而不是 function。

let print () = printfn "%s" "Hello World"

正確寫法應該使用 () 代表其無 input 值,但其 定義域() ,也就是 unit type。

F# 之 Unit 與 Ignore 簡介

Type Inference 推導的 printunit -> unit ,是 unit -> unit 型別的 function,而不是 value。

let print () = printfn "%s" "Hello World"

print ()

呼叫 prinf() 時,也要明確傳入 () 代表 no input。

F# 之 Unit 與 Ignore 簡介

有 return 但不想用

let sum x y  = x + y

sum 2 3

明明 sum() 有 return x + y ,但呼叫 sum() 時卻沒處理 return 值,compiler 編譯後會抱怨。

F# 之 Unit 與 Ignore 簡介

有兩種解法:

let sum x y  = x + y
let result = sum 2 3

明確將 sum() 結果 binding 到 result value,這是 FP 最標準做法。

let sum x y = x + y
sum 2 3 |> ignore

sum() 結果 pipeline 到 ignore() ,則 compiler 就不會抱怨。

實務上若真的不想處理 function 的結果,建議使用 ignore()

Conclusion

  • FP 嚴格遵守數學 function 定義,但電腦 function 卻可能沒有 input 也沒有 return,因此 F# 特別設計出 unit() ,這樣就與數學的 定義域對應域 的觀念相通

Reference

Microsoft Docs , Unit Type

Jose Gonzales , What’s the Unit Type in F#?

Stack overflow , What does this () notation mean?

Chris Smith , Pramming F# 3.0 2nd


以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,也希望大家多多支持 码农网

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

Music Recommendation and Discovery

Music Recommendation and Discovery

Òscar Celma / Springer / 2010-9-7 / USD 49.95

With so much more music available these days, traditional ways of finding music have diminished. Today radio shows are often programmed by large corporations that create playlists drawn from a limited......一起来看看 《Music Recommendation and Discovery》 这本书的介绍吧!

SHA 加密
SHA 加密

SHA 加密工具

正则表达式在线测试
正则表达式在线测试

正则表达式在线测试

RGB CMYK 转换工具
RGB CMYK 转换工具

RGB CMYK 互转工具