我认为新手会被"做"弄糊涂,我从语言设计的角度对此表示怀疑.你不想在一个新语言的生命的这个阶段混淆新手,几乎每个人都是新手,你想要新手,以建立社区和临界质量;-)
'do'的文档(3.8.3.做或不做)说:
这种结构有一个很好的理由:在Opa中,每个函数定义(更常见的是每个不在顶层的值)以一个值结束,这是函数的结果 - 相反,一旦我们达到第一个值,我们有功能的结果,所以功能完成.
这是我在上面加粗的部分,我想知道:为什么在达到第一个值后功能完成了?为了避免在OCaml中看到这样的事情,我们是否"引入"?:
let _ = (some expression)
Run Code Online (Sandbox Code Playgroud)
在Opa的语言设计中使用'do'的替代方法是什么?如何处理这个问题(从语言设计的角度来看).
没有直接的答案.
do当前的OPA语法需要,但我们可以选择另一种理念.
例如:
user_update(x) =
line = <div>
<div>{x.author}:</div>
<div>{x.text}</div>
</div>
do Dom.transform([#conversation +<- line ])
Dom.scroll_to_bottom(#conversation)
Run Code Online (Sandbox Code Playgroud)
do需要知道函数不是Dom.transform在行结束,而是在下一行.正如你在书中所写的那样:"......一旦我们达到了第一个值,我们就得到了函数的结果,所以函数就完成了."
但是使用类似js的语法可能是:
user_update(x) {
line = <div>
<div>{x.author}:</div>
<div>{x.text}</div>
</div>;
Dom.transform([#conversation +<- line ]);
Dom.scroll_to_bottom(#conversation)
}
Run Code Online (Sandbox Code Playgroud)
我们已经收到了大量关于OPA语法的反馈和建议,我们正在努力寻找最佳方法.您可以阅读这篇文章了解更多信息:
众包OPA语法 http://dutherenverseauborddelatable.wordpress.com/2011/05/30/crowdsourcing-the-syntax/
阅读评论.;)