为什么 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
) 相反。
我注意到在 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
) 相反。