为什么Opa语言需要'do'?

ane*_*eal 3 opa

我认为新手会被"做"弄糊涂,我从语言设计的角度对此表示怀疑.你不想在一个新语言的生命的这个阶段混淆新手,几乎每个人都是新手,你想要新手,以建立社区和临界质量;-)

'do'的文档(3.8.3.做或不做)说:

这种结构有一个很好的理由:在Opa中,每个函数定义(更常见的是每个不在顶层的值)以一个值结束,这是函数的结果 - 相反,一旦我们达到第一个值,我们有功能的结果,所以功能完成.

这是我在上面加粗的部分,我想知道:为什么在达到第一个值后功能完成了?为了避免在OCaml中看到这样的事情,我们是否"引入"?:

let _ = (some expression)
Run Code Online (Sandbox Code Playgroud)

在Opa的语言设计中使用'do'的替代方法是什么?如何处理这个问题(从语言设计的角度来看).

Céd*_*ics 6

没有直接的答案. 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/

阅读评论.;)