【问题标题】:When to use `let ... in` to bind variables?何时使用 `let ... in` 绑定变量?
【发布时间】:2018-05-31 12:26:19
【问题描述】:

基于“F#中关键字“in”的含义”的anwser

let (x = 2 and y = x + 2) in
    y + x

这不会和

一样工作
let (x = 2 and y = x + 2)
    y + x

在前一种情况下,x 仅绑定在 in 关键字之后。在后一种情况下,正常的变量作用域规则生效,因此变量一经声明就被绑定。

何时需要使用in 指定绑定变量,而不是像声明时那样绑定?

【问题讨论】:

  • 那甚至不是有效的 F#。 let 只允许一个绑定。而且,据我了解,总是有in,但轻量级语法 允许您省略它。
  • @PetSerAl 应该是let x = 2 in y = x + 2 in y +x,我刚刚复制了接受的答案。
  • 语法正确应该是let x = 2 in let y = x + 2 in y + x

标签: .net f# functional-programming


【解决方案1】:

你可以像这样使用let/in

let x = 2 in
    let y = x + 2 in
        y + x

F# 是一种基于表达式的语言,这种形式的代码揭示了这一点。但是,内置了语法糖,因此您可以以一种看起来基于语句但实际上并非如此的扁平方式编写相同的东西:

let x = 2
let y = x + 2
y + x

如果您真的想留在同一行 let x = 2 in x + 2,可以使用 in。然而,看到这一点是非常不寻常的。在我使用过的数千行 F# 中,我从未见过或亲自使用过它。

【讨论】:

  • 如果xy相互依赖,你会怎么做?
  • @leftaroundabout 这些只是值。如果它们相互依赖,它不会创建一个无限循环来评估它们吗?如果你想要相互递归的函数,那么你可以使用let rec...and
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-11-17
  • 1970-01-01
  • 2022-09-29
  • 2011-06-25
  • 2014-03-09
  • 2011-08-24
  • 1970-01-01
相关资源
最近更新 更多