【问题标题】:How can I define a local function within another function in DAML?如何在 DAML 中的另一个函数中定义本地函数?
【发布时间】:2019-03-12 18:01:41
【问题描述】:

我正在尝试在另一个函数中定义一个本地函数,但似乎无法正确使用语法。我有以下内容:

foo : Int -> Bool
foo i =
  let bar j = j < 5
  bar i

但我在 bar 上遇到语法错误。定义这样一个函数的正确语法是什么?

【问题讨论】:

    标签: daml


    【解决方案1】:

    对于普通的局部函数绑定,以及一般使用let的变量绑定,在定义了所有函数/变量之后,您必须使用in

      let bar j = j < 5
      in bar i
    

    没有inlet 只能在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 letthis discussion of when to use let or where

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-01-15
      • 1970-01-01
      • 1970-01-01
      • 2011-12-11
      • 1970-01-01
      • 1970-01-01
      • 2017-09-01
      • 1970-01-01
      相关资源
      最近更新 更多