我正在编辑Opa文档中的Hello-wiki代码。我想要一个wiki主题来获取数据库中现有主题的列表。我有一个被称为上的默认主题功能:Opa:遍历字符串映射并根据它形成一个新字符串
/**
* Collect all created topics from /wiki
* and present them in Markdown format
*/
function collect_topics(page) {
string collection = "#Available topics\n"
// Format as a list
Set.iter(function(topic) {
collection = "{collection} *[{topic}](./{topic})\n"
}, [/wiki])
save_source(page, collection)
}
...
function start(url) {
match (url) {
case {path: [] ... } :
{ collect_topics("Topics") };
case {~path ... } :
{ display(String.capitalize(String.to_lower(String.concat("::", path)))) };
}
}
这就提出了一个语法错误:“找到了一个结合的条件”,因为字符串是不可变的,我的理解。有没有办法改变一个创建的字符串?例如:
string x = "foo"
x = x^x
如果这是不可能的,这将是一个更好的办法?
我在编译有关地图类型时出现错误。我应该使用StringMap.fold或Map.fold来代替?我无法弄清楚他们的语法。 Opas类型表达式对我来说还是有点失落。 – schme
对不起,我没有意识到你正在使用'[/ wiki]'作为一个参数。我只是修正了上面的例子。写'/ wiki',而不是'[/ wiki]'这是一个包含一个元素(wiki地图)的列表。是的,使用Map.fold(它适用于任何类型的地图,它是一个多态函数)或StringMap,它只能用于stringmaps。然后,你的折叠函数需要3个参数map key,value和你的累加器。有关Typer的更多信息,请访问:http://doc.opalang.org/manual/The-type-system –
谢谢!需要大量的信息和更好的理解。 – schme