1

モジュールに次のコードがあります。

-module(my_server).

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

Opts1 = #server_opts{port=80}.

Erlangシェルでコンパイルしようとすると、のようなエラーが発生します syntax error before Opts1。上記のコードで何が問題になる可能性があるかについての考え。コードは次のWebサイトから取得されていることに注意してください。Erlangで 例を記録します。

4

2 に答える 2

5

次の行:

Opts1 = #server_opts{port=80}.

関数本体内に含まれている必要があります:

foo() ->
    Opts1 = #server_opts{port=80},
    ...

モジュールの外部から呼び出すことができるように、関数をエクスポートすることを忘れないでください。

-export([test_records/0]).

完全な例は次のとおりです。

-module(my_server).

-export([test_records/0]).

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

test_records() ->
    Opts1 = #server_opts{port=80},
    Opts1#server_opts.port.
于 2012-11-12T08:01:19.020 に答える
3

たぶん、それはグローバル定数だと思っていたかもしれませんがOpts1、erlangにはグローバル変数はありません。

マクロ定義を使用して、グローバル定数(実際にはコンパイル時に置き換えられる)のようなものを使用できます。

-module(my_server).

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

%% macro definition:    
-define(Opts1, #server_opts{port=80}).

%% and use it anywhere in your code:

my_func() ->
     io:format("~p~n",[?Opts1]).

PS シェルからのレコードを使用します。my_server.hrl仮定-レコードの定義を含むファイルを作成しましたserver_opts。まず、関数を使用してレコード定義をロードする必要がありますrr("name_of_file_with_record_definition")。その後、シェルでレコードを操作する準備が整います。

1> rr("my_record.hrl").
[server_opts]
2> 
2> Opts1 = #server_opts{port=80}.
#server_opts{port = 80,ip = "127.0.0.1",
             max_connections = 10}
3> 
3> Opts1.
#server_opts{port = 80,ip = "127.0.0.1",
             max_connections = 10}
4> 
于 2012-11-12T10:08:13.660 に答える