标签: erlang-shell

Erlang shell的神秘行为

我在Rebar下捆绑了一个Erlang应用程序(现在只有几个库模块).目录结构如下所示:

MyProject  
- apps  
-- myapp  
--- ebin  
--- src  
--- yada   
- rebar  
- rebar.conf  
Run Code Online (Sandbox Code Playgroud)

MyProject $ ./rebar编译按预期响应.

我打开了Erlang shell(MyProject $ erl -pa apps/*/ebin myapp)并且可以执行导出的函数.

现在我编辑源文件,添加导出的函数,然后重新编译.但是,whaaa ---当我尝试执行我的新导出函数时,我得到一个错误---未定义的函数.我在Erlang shell中执行myAppModule:module_info/0.它没有列出我刚添加到源文件中的新函数,也没有列出我对其他函数所做的更改.

我删除相关的*.beam文件并重新编译.还是看不出我的变化.

但是,现在我从Erlang shell中获取q()并重新输入.你知道什么!一切正常,包括我的新功能.

为什么会这样?

非常感谢,

LRP

erlang erlang-shell rebar

1
推荐指数
1
解决办法
340
查看次数

Erlang 在记录构建时给出语法错误

我在一个模块中有以下代码:

-module(my_server).

-record(server_opts,
        {port, ip = "127.0.0.1", max_connections = 10}).

Opts1 = #server_opts{port=80}.
Run Code Online (Sandbox Code Playgroud)

当我尝试在 Erlang shell 中编译它时,它会给出类似 syntax error before Opts1. 知道上面的代码可能有什么问题。请注意,代码取自以下网站: 在 Erlang 中记录示例

syntax erlang record erlang-shell

1
推荐指数
1
解决办法
240
查看次数

我的Erlang项目有多个应用程序:我应该如何启动它们?

作为OTP noobie,我正在努力了解如何构建我的Erlang项目.到目前为止,它在rebar管理的app目录下有几个应用程序:

proj_root
   apps
      app1
      app2
      appN
   rebar.config 
Run Code Online (Sandbox Code Playgroud)

我可以在应用程序:start(app1)的shell中启动app1.毫无疑问,我可以通过appN重复这一点.但是有更好或更好的方法吗?我可以说,编写一个捆绑所有这些开头的函数吗?如果是的话,我该把它放在哪里?

我还有其他几个问题,但会另外发布.

非常感谢,

LRP

erlang erlang-otp erlang-shell

1
推荐指数
1
解决办法
1172
查看次数

Erlang if语句并返回true

我想知道,erlang的if语句和返回值背后的想法(在这种情况下是true-> true).这是我的代码片段

if
 (Velocity > 40) -> io:format(" processing fast !~n") ;
 true -> true
end,
Run Code Online (Sandbox Code Playgroud)

我知道Erlang不允许你有一个if if without true statement选项.但即使我可以使用true-> false但它对最终输出无关紧要.

实际上if子句和返回值背后的想法是什么.

erlang erlang-shell

1
推荐指数
1
解决办法
685
查看次数

执行Erlang脚本时引发“初始化终止于do_boot”

这是我在'factorial.erl'中的代码:

-module(factorial).
-author("jasonzhu").

%% API
-export([fac/1]).

fac(0) -> 1;
fac(N) -> N * fac(N-1).
Run Code Online (Sandbox Code Playgroud)

在提示符下交互此代码时,它可以正常工作:

1> c(factorial).
{ok,factorial}
2> factorial:fac(20).
2432902008176640000
Run Code Online (Sandbox Code Playgroud)

但是,如果我从命令行编译并执行它,则会发生一些错误。

Jasons-MacBook-Pro:src jasonzhu$ erlc factorial.erl 
Jasons-MacBook-Pro:src jasonzhu$ erl -noshell -s factorial fac 20 -s init stop
{"init terminating in do_boot",{badarith,[{factorial,fac,1,[{file,"factorial.erl"},{line,8}]},{init,start_it,1,[]},{init,start_em,1,[]}]}}

Crash dump was written to: erl_crash.dump
init terminating in do_boot ()
Run Code Online (Sandbox Code Playgroud)

有人可以帮我吗?我是Erlang的新手,非常感谢!

erlang erlang-shell

1
推荐指数
1
解决办法
2373
查看次数

在Erlang Shell中显示长列表

当我调用在Erlang shell中返回长列表或元组的函数时,列表将被截断,并显示...在末尾以指示还有更多未显示的元素。如何获取外壳以显示整个列表?

例如:键入时code:module_info().,返回以下内容:

[{module,code},
 {exports,[{objfile_extension,0},
           {load_file,1},
           {load_abs,1},
           {load_abs,2},
           {load_binary,3},
           {load_native_partial,2},
           {load_native_sticky,3},
           {delete,1},
           {purge,1},
           {soft_purge,1},
           {get_object_code,1},
           {stop,0},
           {root_dir,0},
           {lib_dir,0},
           {lib_dir,1},
           {lib_dir,2},
           {compiler_dir,0},
           {priv_dir,1},
           {stick_dir,1},
           {unstick_dir,1},
           {stick_mod,1},
           {unstick_mod,1},
           {is_sticky,1},
           {set_path,...},
           {...}|...]},
 {attributes,[{vsn,[225576456026721604984939683025195514980]},
              {deprecated,[{rehash,0,next_major_release}]}]},
 {compile,[{options,[{outdir,"/net/isildur/ldisk/daily_build/19_prebuild_master-opu_o.2016-06-21_20/otp_src_19/lib/kernel/src/../ebin"},
                     {i,"/net/isildur/ldisk/daily_build/19_prebuild_master-opu_o.2016-06-21_20/otp_src_19/lib/kernel/src/../include"},
                     warnings_as_errors,debug_info]},
           {version,"6.0.3"},
           {source,"/net/isildur/ldisk/daily_build/19_prebuild_master-opu_o.2016-06-21_20/otp_src_19/lib/kernel/src/code.erl"}]},
 {md5,<<169,180,113,244,195,188,176,68,162,6,74,100,65,
        30,60,100>>}]
Run Code Online (Sandbox Code Playgroud)

我希望将{set_path,...}, {...}|...]},其扩展为在shell中显示整个列表。

erlang-shell

1
推荐指数
1
解决办法
566
查看次数

为什么erlang shell只从生成的进程接收退出消息一次?

这是代码:

Erlang/OTP 20 [erts-9.1] [source] [64-bit] [smp:2:2] [ds:2:2:10] [async-threads:10] [kernel-poll:false]

Eshell V9.1  (abort with ^G)
1> process_flag(trap_exit, true).
false
2> spawn_link(fun() -> exit(reason) end).
<0.63.0>
3> receive X -> X after 0 -> 'end' end.
{'EXIT',<0.63.0>,reason}
4> spawn_link(fun() -> exit(reason) end).
<0.66.0>
5> receive X -> X after 0 -> 'end' end.  
'end'
Run Code Online (Sandbox Code Playgroud)

为什么erlang shell不会从第二个生成的进程接收退出消息?

erlang erlang-shell

1
推荐指数
1
解决办法
64
查看次数

为什么不在Erlang中编译此函数

我是Erlang的新手,所以请和我在一起。

我正在尝试通过文件erlang来编译此函数animal.erl

module(animal).
help_moi(Animal) ->
    Talk = if Animal == cat -> "miaou";
              Animal == beef -> "meuuuh";
              Animal == dog -> "Wouf";
              Animal == tree -> "treee!";
              true -> "ezfezfezf,"
    end, %blablabla%
    {Animal ,"dit", ++ Talk ++ "!" }. %oh là là là%     
Run Code Online (Sandbox Code Playgroud)

然后我用 erl

c(animal).
Run Code Online (Sandbox Code Playgroud)

这些错误,我正在

1> c(animal).
animal.erl:1: syntax error before: '.'
animal.erl:9: syntax error before: '++'
animal.erl:9: no module definition
error
Run Code Online (Sandbox Code Playgroud)

我试图在google上浏览,但没有太多文档。

有任何想法吗?

erlang erlang-shell

1
推荐指数
1
解决办法
64
查看次数

Erlang 无法连接到 mysql/mariadb

我无法使用 erlang 连接到 mysql/mariadb。

根据这个github-page的要求:https : //github.com/mysql-otp/mysql-otp

要求:

Erlang/OTP version R16B or later
MySQL database version 4.1 or later or MariaDB
GNU Make or Rebar or any other tool for building Erlang/OTP applications
Run Code Online (Sandbox Code Playgroud)

版本:

14> erlang:system_info(otp_release).
"22"
Run Code Online (Sandbox Code Playgroud)

我不确定是否不再需要此要求,但我添加了以下内容:

[mysqld] default_authentication_plugin=mysql_native_password

到我的 /etc/my.cnf。但这可能无关紧要,因为错误是一个未定义的函数。我可以编译代码,但我不能运行它。非常感谢任何帮助使其正常工作。

编码:

-module(mydatabase).
-compile(export_all).

connect_to_database() -> 
Conn = mysql:start_link([{host, "localhost"}, {user, "user"},
                       {password, "password"}, {database, "MyDatabase"}]) ,
           
  case Conn of
      {ok, Pid} -> io:fwrite("~w~w~n", [ok,Pid]);
      {error, ConnErr}  -> io:fwrite("error : ~p ~n", [ConnErr])
    end.
              
 start() -> connect_to_database().
Run Code Online (Sandbox Code Playgroud)

mariadb …

mysql erlang mariadb erlang-shell

1
推荐指数
1
解决办法
111
查看次数

尝试在erlang中捕获示例

我按照文档但不明白尝试捕获,有人可以用一个简单的例子解释一下吗?

erlang riak erlang-shell erlang-ports

0
推荐指数
1
解决办法
292
查看次数

标签 统计

erlang-shell ×10

erlang ×9

erlang-otp ×1

erlang-ports ×1

mariadb ×1

mysql ×1

rebar ×1

record ×1

riak ×1

syntax ×1