Opa 如何迭代stringmap中的键?
我真正想做的是迭代stringmap的键。我正在使用新的语法。我找不到关于StringMap.iter()的任何信息,所以我使用了在某个地方为List.iter()找到的语法。我认为原始代码实际上并没有对键进行迭代,现在如果我能让它工作的话,我会满足于对值进行迭代 我的代码如下: 我得到以下错误:Opa 如何迭代stringmap中的键?,opa,Opa,我真正想做的是迭代stringmap的键。我正在使用新的语法。我找不到关于StringMap.iter()的任何信息,所以我使用了在某个地方为List.iter()找到的语法。我认为原始代码实际上并没有对键进行迭代,现在如果我能让它工作的话,我会满足于对值进行迭代 我的代码如下: 我得到以下错误: Error File "test.opa", line 23, characters 1-64, (23:1-23:64 | 472-535) Function was found of type
Error
File "test.opa", line 23, characters 1-64, (23:1-23:64 | 472-535)
Function was found of type
(string, 'a -> void), ordered_map(string, 'a, String.order) -> void but
application expects it to be of type
(string -> xhtml), stringmap(item) -> 'b.
Types string, 'a -> void and string -> xhtml are not compatible
Hint:
Function types have different arguments arity (2 versus 1).
我尝试了其他几种方法,但它们似乎使用了旧语法,没有与编译器配合。我真的不明白伏都教告诉我的错误是什么,所以问题是,如何使用StringMap.iter()?或者以其他方式迭代StringMap中的键?
函数类型具有不同的参数arity(2对1)
表示您尝试使用具有1个参数的函数,而预期使用具有2个参数的函数。您只能通过值
在列表上迭代,但可以通过键
和值
在地图上迭代
然后,List.iter
或StringMap.iter
就意味着不会产生副作用(比如登录控制台)。它们不返回任何值。这可能不是您希望在代码中执行的操作
您应该改用StringMap.fold:
// item is a record of type {string description, string url}
function render_item(item) {
<>
<li>
<h4>item</h4>
<a href="{item.url}">{item.description}</a>
</li>
</>
}
function render_index() {
function f(key, item, acc){
[render_item(item) | acc]
}
<ul>
{ StringMap.fold(f, /mydb/items, []) }
</ul>
}
//项是类型为{string description,string url}的记录
函数渲染_项(项){
项目
}
函数render_index(){
功能f(关键、项目、附件){
[呈现项目(项目)|附件]
}
{StringMap.fold(f,/mydb/items,[])}
}
成功了,谢谢!只是想知道这个“[render_item(item)| acc]”是关于什么的?这是否以某种方式累积了产出?acc到底是什么?acc是一个列表类型的累加器,一个xhtml列表<代码>[e|acc]在列表的开头添加e
acc
。