我想用要调用的函数的名称调用xyz.
-module(sample).
-export([xyz/1]).
xyz(Name) -> Name().
p() -> "you called p".
g() -> "you called g".
Run Code Online (Sandbox Code Playgroud)
但是我收到以下错误:
1> c(sample.erl).
./sample.erl:6: Warning: function p/0 is unused
./sample.erl:7: Warning: function g/0 is unused
{ok,sample}
2> sample:xyz('p').
** exception error: bad function p
in function sample:xyz/1
3>
Run Code Online (Sandbox Code Playgroud)
Chr*_*ian 23
你必须输出p和g是正确的.然后,您可以使用apply/3来调用它.
erlang:apply(sample, p, [])
Run Code Online (Sandbox Code Playgroud)
只有fun-values可以与Fun(...)语法一起使用.你传递的是原子值.当错误消息消失时,原子是一个"坏函数".你可以做类似的事情
xyz(p) -> fun p/0;
xyz(g) -> fun g/0.
Run Code Online (Sandbox Code Playgroud)
然后继续打电话
Fun = xyz(p),
Fun()
Run Code Online (Sandbox Code Playgroud)
-module(sample).
-export([xyz/1, p/0, g/0]).
xyz(Name) -> ?MODULE:Name().
p() -> "you called p".
g() -> "you called g".
1> sample:xyz(p).
"you called p"
Run Code Online (Sandbox Code Playgroud)
模式匹配是使用的习语:
-module(sample).
-export([xyz/1]).
xyz(p) -> p();
xyz(q) -> g().
p() -> "you called p".
g() -> "you called g".
Run Code Online (Sandbox Code Playgroud)
如果您想要动态,可以使用gen_event服务器.
本质上这是一个服务器,它包含一个由键/功能对组成的状态,如下所示:
[{p, #func1},
{g, #func2},
{..., ...},
...]
Run Code Online (Sandbox Code Playgroud)
然后,您可以将事件绑定到函数.(不用说,还有更多的东西.
| 归档时间: |
|
| 查看次数: |
10644 次 |
| 最近记录: |