gpt4 book ai didi

linq - 为什么在使用方法链接查询表达式 where 子句的 F# 中需要括号?

转载 作者:行者123 更新时间:2023-12-01 09:48:54 27 4
gpt4 key购买 nike

尝试通过 LinqPad 在 F# 中编写更多查询时,我遇到了一个关于 where 子句的有趣问题。

let dc = new TypedDataContext()

let q = query {
for o in dc.OrderItem do
where (o.Description.Contains("spam"))
select o
}

q |> Dump

如果我删除 o.Description.Contains("spam") 周围的括号,我会收到下面常见的错误消息。

Successive arguments should be separated by spaces or tupled, and arguments involving function or method applications should be parenthesized (using external F# compiler)

当我看到这个错误时,我通常会意识到我没有提供足够的信息来让编译器理解我正在尝试链接先前方法调用或属性获取访问器调用的结果,但是在这个我不清楚的情况。此外,我很好奇是否有更惯用的方式来满足编译器的条件,而不必绕过表达式来添加左括号和右括号。

最佳答案

如果你这样做,你会看到相同的结果:

let f x = 1

f o.Description.Contains("spam")

如消息所示,如果您使用方法调用的结果(在本例中为 Contains)作为函数的参数,则需要将方法调用括起来。即使 where 是一个查询运算符而不是一个真正的函数,同样的结果也适用。

关于linq - 为什么在使用方法链接查询表达式 where 子句的 F# 中需要括号?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42164787/

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