【发布时间】:2019-03-12 18:01:41
【问题描述】:
我正在尝试在另一个函数中定义一个本地函数,但似乎无法正确使用语法。我有以下内容:
foo : Int -> Bool
foo i =
let bar j = j < 5
bar i
但我在 bar 上遇到语法错误。定义这样一个函数的正确语法是什么?
【问题讨论】:
标签: daml
我正在尝试在另一个函数中定义一个本地函数,但似乎无法正确使用语法。我有以下内容:
foo : Int -> Bool
foo i =
let bar j = j < 5
bar i
但我在 bar 上遇到语法错误。定义这样一个函数的正确语法是什么?
【问题讨论】:
标签: daml
对于普通的局部函数绑定,以及一般使用let的变量绑定,在定义了所有函数/变量之后,您必须使用in:
let bar j = j < 5
in bar i
没有in 的let 只能在do 块中使用,在这种情况下,该变量是为do 块的其余部分定义的:
blah = do
let bar j = j < 5
assert $ not $ bar 5
pure $ bar 5
但是,这只能在使用do 有效的情况下使用。否则,请使用in。
where 子句也可以附加到定义中,以代替 let:
foo i = bar i
where bar j = j < 5
where 的这种用法与其在template 语法中的作用无关。
请注意,where 虽然在某些情况下更好,但对于可以在哪里(抱歉)使用它有很大的限制,而(再次抱歉)let/in 可以在任何地方使用 允许使用表达式:
foo i =
let bar j = j < 5
in bar (let q = 2 in i + q)
参见daml docs on let 和this discussion of when to use let or where。
【讨论】: