为什么 elixir 改变了向进程发送消息的表示法?

Why did elixir change the notation for sending a message to a process?

我注意到在 elixir 版本 0.10.1 中,您向这样的进程发送消息

 my_process <- :message, self

但现在在 elixir 1.0.2 中,你向这样的进程发送消息

 Process.send my_process, :message, self

此更改的原因是什么?

在此更改之前,列表推导式如下所示:

lc x inlist my_list do
  # ...
end

但是,语法对于新手来说很奇怪,因此 Elixir 团队着手寻找替代方法。获胜的语法是

for x <- my_list do
  # ...
end

现在,<- 的含义突然变得取决于上下文。这通常不是一件坏事,但它通常更难解析并且可能会产生歧义,因此他们决定对其进行更改。

使用 send 而不是 <- 的另一个原因是为了与 receive 语法一致。让这两者具有相似的视觉外观比在不同的语法级别上处理它们更有意义。

顺便说一下,您对 Process.send/3 的用法是错误的。 The third parameter must be :noconnect or :nosuspend. Typically you would use the simpler and shorter send (aka Kernel.send) 相反。