如何使用erlang shell中的参数生成进程

如何使用erlang shell中的参数生成进程,erlang,spawn,erlang-shell,Erlang,Spawn,Erlang Shell,我不知道从erlang shell启动进程时要使用什么重载spawn,因为我需要传递参数 A=spawn( fun(TID)-> receive {FROM,MSG}-> FROM ! {self(),MSG} after 0 -> TID !{self(),timeouted} end end, TID ). 只

我不知道从erlang shell启动进程时要使用什么重载
spawn
,因为我需要传递参数

A=spawn(
    fun(TID)-> 
           receive {FROM,MSG}->
                  FROM ! {self(),MSG}
           after 0 ->
                  TID !{self(),timeouted}
           end
   end,
   TID
  ).
只有
函数
和参数没有重载。 从shell启动时,模块名称是什么

我也尝试过:

A=spawn(?MODULE,fun()->....,TID).
p.S
在我的例子中,正如您所看到的,我需要为
spawn
方法提供参数,同时直接从erlang shell运行它。

只需将定义嵌入到一个函数中:

A = fun(X) ->
    TID = X,             
    spawn(      
        fun()->  
            receive {FROM,MSG}->          
                FROM ! {self(),MSG}    
            after 0 ->                    
                TID !{self(),timeouted}
            end                           
        end                                  
    )
end.

然后您可以使用
A(YourParam)

通常,您在模块中定义一个函数:

-module(a).
-compile(export_all).

go(X)-> 
    receive {From, Msg}->
        From ! {self(), Msg}
    after 0 ->
        io:format("~s~n", [X])
    end.
然后这样做:

9> c(a).                         
a.erl:2: Warning: export_all flag enabled - all functions will be exported
{ok,a}

10> Pid = spawn(a, go, ["hello"]).
hello
<0.95.0>
在外壳中:

1> c(a).

2> a:test().
  2 tests passed.
ok
1> c(a).
a.erl:2: Warning: export_all flag enabled - all functions will be exported

2> a:go_test().
以下是测试失败时发生的情况:

5> a:test().
a: go_test...*failed*
in function a:go_test/0 (a.erl, line 18)
**error:{badmatch,"hello"}
  output:<<"">>

=======================================================
  Failed: 1.  Skipped: 0.  Passed: 1.
error

6> 
然后在外壳中:

1> c(a).

2> a:test().
  2 tests passed.
ok
1> c(a).
a.erl:2: Warning: export_all flag enabled - all functions will be exported

2> a:go_test().
如果
go(“hello”)
没有返回
“hello”
,则会出现错误匹配:

**异常错误:右侧值“hello”不匹配 在功能a中:进行测试/0(a.erl,第18行)


使用eunit的优点是,只需一个命令,
a:test()
,您就可以执行模块中以
\u test

结尾的所有函数,我知道您可以在模块中定义,但是我想做临时测试,并且对直接从shell生成带有参数的过程感兴趣。但是我想做临时测试——是的,但是在shell中键入任何内容都太麻烦了。你可以通过在模块中键入测试来在正在测试的模块中添加临时测试。请参见我的答案底部的示例。