为啥 erlang spawn 函数调用中出现语法错误 - “之前的语法错误:')'”?

Posted

技术标签:

【中文标题】为啥 erlang spawn 函数调用中出现语法错误 - “之前的语法错误:\')\'”?【英文标题】:Why is the syntax error coming in erlang spawn function call - " syntax error before: ')' "?为什么 erlang spawn 函数调用中出现语法错误 - “之前的语法错误:')'”? 【发布时间】:2019-03-09 10:13:34 【问题描述】:

这是我在在线编译器中运行的代码

-module(helloworld). 
-export([start/0, call/2]). 

start() -> 
% error in the below line as  syntax error before: ')'
Pid = spawn(?MODULE, call, ["hello","world"] ),
io:fwrite("~p",[Pid]).


call(Arg1, Arg2) -> 
io:format("~p ~p~n", [Arg1, Arg2]). 

【问题讨论】:

如果在线编译器给出了这个代码的错误,那么它是错误的。 请提供您使用的在线编译(web ?) 【参考方案1】:

我在tutorialspoint 在线尝试了erlang 编译器,并且可以重现问题。我猜编译器出了点问题,这不是你的错,继续调查Erlang :)

https://www.tutorialspoint.com/compile_erlang_online.php

你可以在线改成这个编译器

https://paiza.io/en/projects/new?language=erlang

//编辑: 问题可能来自tutorialspoint 的编辑。它使编译器无法理解函数spawn/3,请为spawn/3 函数添加双引号'',如下所示,它将编译并运行:

 Pid = 'spawn'(?MODULE, call, ["hello","world"] ),

【讨论】:

这很奇怪......我试过tutorialspoint,如果你把spawn改成apply,那么它会编译并运行......

以上是关于为啥 erlang spawn 函数调用中出现语法错误 - “之前的语法错误:')'”?的主要内容,如果未能解决你的问题,请参考以下文章

erlang函数调用乱序?

Erlang spawn_link/3 的错误参数错误

Erlang 并发编程

Erlang timer:sleep(1000) 导致线程死机

为啥第二次调用接收没有在 Erlang shell 中检索消息?

为啥我通过 spawn() 创建的 Node 子进程挂起?