gpt4 book ai didi

F#条件表达式,如果...则..else返回单位或()

转载 作者:行者123 更新时间:2023-12-04 13:30:29 24 4
gpt4 key购买 nike

F#的条件表达式需要检查的条件,是否为true的分支以及是否为false的分支。例如:

let x = 
if ("hello" = null)
then true
else false //error if else branch missing

但是,当涉及到 unit,又名 ()时,事情变得很奇怪。
let y = 
if ("hello" = null)
then raise <| new ArgumentNullException()
else () //happy with or without else branch

更简单地说:
let z = 
if ("hello" = null)
then ()
else () //happy with or without else branch

为什么返回 else时不需要 unit分支?

最佳答案

考虑以下代码:

let f a = if a > 5 then true

如果调用 f 10,它将返回 true

现在,问问自己: f 2应该返回什么?我知道您会说 false,但是编译器怎么知道呢?我的意思是,在两种情况下您都可能返回 true,不是吗?甚至,也许在 a <= 5情况下崩溃了,谁知道呢?

因此,为了使程序“完整”(即包含有关每种情况下的操作说明),您始终必须指定 else分支。
unit是非常特殊的。

返回 unit意味着没有有意义的返回值。本质上 unit代表副作用:这意味着返回的东西是要在外部世界产生某种影响的。由于F#不是纯粹的语言,因此返回 unit的事情非常普遍。例如,调试日志记录:
let f x =
if x < 42 then printfn "Something fishy, x = %d" x
x + 5

有了这样的语句,就没有歧义:众所周知, else分支也打算返回 ()。毕竟, unit没有其他值了吗?同时,始终在末尾添加 else ()会非常麻烦且令人困惑。因此,出于可用性的考虑,在这种特定情况下,编译器不需要 else分支。

关于F#条件表达式,如果...则..else返回单位或(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51326439/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com