我真正想做的是迭代字符串图的键。我正在使用新的语法。我在StringMap.iter()上找不到任何信息,所以我使用了我在List.iter()的某处找到的语法。我不认为原始代码实际上是在密钥上进行迭代,现在如果我可以让它工作,我会满足于迭代这些值。
我的代码在这里: http://pastebin.com/9HB20yzy
我收到以下错误:
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中的键?
答案 0 :(得分:0)
Function types have different arguments arity (2 versus 1)
表示您尝试使用带有1个参数的函数,而具有2个参数的函数是预期的。您只通过values
迭代列表,但是您通过keys
和values
迭代地图。
然后,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>
}