2013-03-08 46 views
1

我不完全確定如何在erl模塊中定義erlang函數。我收到以下錯誤:Erlang:從beam可執行文件中調用rr(?MODULE)?

11> invoke_record:invoke(). 
** exception error: undefined function erlang:rr/1 

從這個簡單的代碼試圖調用從梁可執行文件中的rr(?MODULE).以「初始化」記錄,以便它不需要從shell中調用每一個時間。

-module(invoke_record). 
-export([invoke/0]). 
-record(process, {pid, 
       reference="", 
       lifetime=0 
       }). 
invoke() -> 
    erlang:rr(?MODULE). 

回答

3

命令rr("file.hrl").僅用於shell進行調試。

由於其他用戶在他們的答案突出導入您的Erlang代碼中包含在.hrl文件中的記錄(或功能)的正確方法包括使用命令-include("file.hrl')

一旦你已經包含了.hrl文件在你的代碼中(通常在基於OTP行爲的模塊中,這在-export(...)部分之後完成),你可以毫無問題地引用erlang記錄(或函數)。

+0

「一旦你在你的代碼中包含了hrl文件,你可以毫無問題地引用erlang記錄(或函數)。」不,只有你明確地說過這一點。讓我知道如果我錯了。 – pandoragami 2013-03-09 14:34:32

+0

我稍微改變了我的答案,以便您可以知道將OTP文件中的-include()部分放在哪裏。 – user601836 2013-03-09 15:19:03

3

rr是一個shell命令。你不能用它編譯代碼。

http://www.erlang.org/doc/man/shell.html

+0

那麼,糟糕...有沒有其他方法可以讓生活更簡單? – pandoragami 2013-03-08 01:11:21

+0

我認爲有,讓我谷歌... – kay 2013-03-08 01:11:56

+0

Theres總得有點。 Erlang是一種非常成熟的語言。 – pandoragami 2013-03-08 01:12:47

3

如果你的目的是在shell來讀了許多記錄定義,以便於調試,你可以寫一個包含所有需要包含語句的文件,只是在外殼調用一次RR。

在rec.hrl:

-include("include/bank.hrl"). 
-include("include/reply.hrl"). 

,並在在外殼

1> rr("rec.hrl"). 
[account,reply] 
2> 

我沒有發現任何方式自動執行此,啓動VM時。

0

在處理項目時,您可以收集純文本文件中要用於該特定項目的所有必需的包含和其他命令行參數。在創建純文本文件後,您可以啓動您的外殼:

erl -args_file FileName 

其中FileName是純文本文件的名稱。請注意,允許erl接受的所有命令行參數爲。另請參閱埃爾標誌在the ERTS Reference Manual

相關問題