我有一个简单的Erlang命令,我想通过它来调用erl -eval
(编译erlydtl模板,如erlydtl页面所述).
当我从shell交互式地执行它时一切正常并且命令立即退出:
erl -pa ebin deps\erlydtl\ebin Eshell V5.9.3.1 (abort with ^G)
1> erlydtl:compile('templates/tictactoe.dtl',tictactoe_dtl,[{out_dir,'ebin'}]).
ok
Run Code Online (Sandbox Code Playgroud)
但是,当我尝试通过erl -eval
(我想从.bat文件运行)时:
erl -pa ebin deps\erlydtl\ebin -noshell -eval erlydtl:compile('templates/tictactoe.dtl',tictactoe_dtl,[{out_dir,'ebin'}])
Run Code Online (Sandbox Code Playgroud)
然后该命令完成其工作(模板已编译)但它不会退出,我需要使用ctrl + c手动终止shell进程(我在Windows下工作).
我只想要命令编译模板并退出.可能是什么问题?
更新:
一种解决方案可能是在命令结尾附加exit()调用,但最后我得到以下结果:
erl -pa ebin deps\erlydtl\ebin -noshell -eval erlydtl:compile('templates/tictactoe.dtl',tictactoe_dtl,[{out_dir,'ebin'}]),exit(success).
{"init terminating in do_boot",success}
Crash dump was written to: erl_crash.dump
init terminating in do_boot (success)
Run Code Online (Sandbox Code Playgroud)
错误信息非常恼人,所以我仍然不喜欢这个解决方案.
我无法在纯模式下运行以下代码.我尝试时显示错误消息:
警告:此系统未配置为本机代码编译.escript:异常错误:没有函数子句匹配test_ escript _1383_ 893414 _479613:main([])(./ test,第5行)函数escript:run/2(escript.erl,第747行)从escript调用:start/1(escript.erl,第277行)调用init:start_it/1调用init:start_em/1
如何配置我的系统以在纯模式下运行它?
码:
#!/usr/bin/env escript
-mode(native). %% to fun faster
main([NStr]) ->
N = list_to_integer(NStr),
IJ = [{I, J} || I <- lists:seq(1, N), J <- lists:seq(1, N)],
lists:foreach(fun({I, J}) -> put_data(I, J, true) end, IJ),
solve(N, 1, [], 0).
solve(N, J, Board, Count) when N < J ->
print(N, Board),
Count + 1;
solve(N, J, Board, Count) ->
F = fun(I, Cnt) ->
case get_data(I, J) of
true ->
put_data(I, J, false),
Cnt2 …
Run Code Online (Sandbox Code Playgroud) 我正在尝试动态评估Erlang术语
启动Erlang
basho-catah% erl
Erlang R16B03 (erts-5.10.4) [source] [64-bit] [smp:4:4] [async-threads:10] [hipe] [kernel-poll:false]
Eshell V5.10.4 (abort with ^G)
Run Code Online (Sandbox Code Playgroud)
创建一个术语
1> {a,[b,c,d]}.
{a,[b,c,d]}
Run Code Online (Sandbox Code Playgroud)
尝试在同一个词中扫描
2> {ok, Tokens, _ } = erl_scan:string("{a,[b,c,d]}").
{ok,[{'{',1},
{atom,1,a},
{',',1},
{'[',1},
{atom,1,b},
{',',1},
{atom,1,c},
{',',1},
{atom,1,d},
{']',1},
{'}',1}],
1}
3> Tokens.
[{'{',1},
{atom,1,a},
{',',1},
{'[',1},
{atom,1,b},
{',',1},
{atom,1,c},
{',',1},
{atom,1,d},
{']',1},
{'}',1}]
Run Code Online (Sandbox Code Playgroud)
但它无法解析该标记化字符串.
4> Foo = erl_parse:parse(Tokens).
{error,{1,erl_parse,["syntax error before: ","'{'"]}}
Run Code Online (Sandbox Code Playgroud)
我有什么想法我做错了吗?
在Erlang控制台中运行此代码时
Pid = spawn(fun() -> "foo" end),link(Pid),receive X -> X end.
Run Code Online (Sandbox Code Playgroud)
我收到以下错误.
** exception error: no such process or port
in function link/1
called as link(<0.71.0>)```
Run Code Online (Sandbox Code Playgroud) 我一直试图解决问题几个小时,对erlang来说很新
lists:sublist([6,9,15,24,39,6,96],7,1).
Run Code Online (Sandbox Code Playgroud)
我希望这打印"100"而不是"d"
我在这里做错了什么?
可能重复:
Erlang shell问题
我在我的macbook pro上安装了erlang 5.9.2,在ubuntu上安装了一台笔记本电脑.但他们都没有同样的问题:
我打开终端并键入erl,我可以看到erlang的版本,所以它运行良好.但我键入了2 + 3的快递,我看不到结果.像这样
1>2 + 3
1>
1>a = 2 + 3
1>a
1>
Run Code Online (Sandbox Code Playgroud)
有谁可以帮助解决这个问题?
多谢!