lambda表达式中逗号的F#语法

lambda表达式中逗号的F#语法,lambda,syntax,f#,Lambda,Syntax,F#,我是新来的。有人能解释一下下面的lambda表达式是什么意思吗?具体来说,Some c.Id后面的逗号在做什么?所有括号都是关于什么的 (fun ((b, p), c) -> (b && p.SelectedInnerRow = Some c.Id, c)) 从C#来我有点困惑 谢谢。括号用于解构元组。lambda表达式接受一个元组(一个元组和一个值)和另一个值;它还返回另一个元组 现在对于涉及的类型-由于名为b的参数是布尔运算符&&的操作数,因此它必须是bool类型。参

我是新来的。有人能解释一下下面的lambda表达式是什么意思吗?具体来说,
Some c.Id
后面的逗号在做什么?所有括号都是关于什么的

(fun ((b, p), c) -> (b && p.SelectedInnerRow = Some c.Id, c))
从C#来我有点困惑


谢谢。

括号用于解构元组。lambda表达式接受一个元组(一个元组和一个值)和另一个值;它还返回另一个元组

现在对于涉及的类型-由于名为
b
的参数是布尔运算符
&&
的操作数,因此它必须是
bool
类型。参数
p
必须有一个名为
SelectedInnerRow
的属性,该属性反过来应该产生一个选项。此选项与参数
c
属性
Id
的另一个选项值相等,因此整个表达式将返回布尔元组和未更改的参数
c


非常感谢你。我忘了F#中的“=”是一个比较运算符,而不是赋值。所以围绕“b&&p.SelectedInerRow=Some c.Id,c”的(..)将其指定为元组输出?哦,对了,右括号集确实不需要。逗号表示表达式将计算为一个元组。@AlanWayne:是的,(a,b)是F#中的一个元组,由逗号定义。也就是说,在某些情况下,您可以编写一个不带括号的元组-在REPL中尝试编写“let a,b=1,2”。从F#开始时,我发现,在元组元素之间使用*的类型声明中,而在代码中使用逗号,令人困惑。
(* Dummy types to make it work *)
type Foo = { SelectedInnerRow : int option }
type Bar = { Id : int }

(fun ((b, p), c) -> (b && p.SelectedInnerRow = Some c.Id, c))
(* val it : _arg1:(bool * Foo) * c:Bar -> bool * Bar *)