gpt4 book ai didi

f# - FSharp 参数模式匹配。为什么声明分配自而不是分配给?

转载 作者:行者123 更新时间:2023-12-02 01:36:15 25 4
gpt4 key购买 nike

我正在查看 FSharp。目前我正在阅读这个资源: http://fsharpforfunandprofit.com/

由于我正在学习一些全新的东西,包括一种新的思维方式,所以我会小心翼翼地让一些对我来说意义不大的东西从身边溜走。

let f1 name =                        // pass in single parameter   
let {first=f; last=l} = name // extract in body of function
printfn "first=%s; last=%s" f l

为什么“f”和“l”位于各自“=”符号的右侧?这不是宣布他们的时候吗?我相信我知道该行的作用(它从“name”记录中提取“first”和“last”属性)。但我无法理解这种语法选择背后的原因,这让我怀疑我并不真正理解这里发生的全部事情。

最佳答案

let= 之间的语法部分称为pattern。如评论中所述,该模式反射(reflect)了您在创建记录时使用的语法。

更一般地说,模式的想法是指定你知道的对象部分(这里是记录字段名),在变化的地方(字段的值),你可以把一个变量名(在这种情况下,模式匹配 绑定(bind) 一个变量)或者您可以编写 _ 来忽略对象那部分中的值。

下面是一些创造值(value)的例子:

let opt = Some(42)                              // Option type containing int
let rcd = { First = "Tomas"; Last = "Hidden" } // Record from your example
let tup = 42, "Hello" // Tuple with int and string

在所有情况下,您都可以在模式中镜像语法:

let (Some(num)) = opt         // This gives warning, because 'opt' could also be None
let { First = n; Last = _ } // Here, we explicitly ignore the last name using '_'
let _, str = tup // Ignore first component of the tuple, but get the 2nd

关于f# - FSharp 参数模式匹配。为什么声明分配自而不是分配给?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31087474/

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