daml - 如何在 DAML 中的另一个函数中定义本地函数?
问题描述
我正在尝试在另一个函数中定义一个本地函数,但似乎无法正确使用语法。我有以下内容:
foo : Int -> Bool
foo i =
let bar j = j < 5
bar i
但是我在bar
. 定义这样一个函数的正确语法是什么?
解决方案
对于普通的本地函数绑定和let
一般的变量绑定,您必须in
在定义所有函数/变量后使用:
let bar j = j < 5
in bar i
A let
withoutin
只能在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)
请参阅有关let 的daml 文档以及有关何时使用 let 或 where 的讨论。
推荐阅读
- python - 我正在尝试创建一个随机杂务生成器,但它似乎无法正确打印
- excel - Excel UDF 函数未更新
- javascript - 巧合排序arraylist搜索
- node.js - 远程服务器 (AWS) 中的映射路径
- php - 在php中将数组转换为矩阵
- node.js - 如何更改节点搜索 package.json 的路径?
- mysql - DataGridView 中的 SQL 到 MySQL
- python - 在机器学习中创建具有多个目标分类数据的模型
- javascript - 调用 addEventListener 调整大小一次?
- python - 根据索引查找列表中大于条件的对数的最佳代码?