0

次の方法でerlシェルにレコードを定義できます。

129> rd(person, {name=""}).
person
130> #person {}.
#person{name = []}
131> #person {name="dummy"}.
#person{name = "dummy"}

しかし、モジュールでレコードを定義して使用する方法がわかりません。my_module.erlを作成するとき:

-module(my_module).

-record(person, {name, phone, address}).

#person {name="dummy"}.

...そしてコンパイルしようとすると、私は次のようになります:

132> c(my_module).          
my_module.erl:5: syntax error before: '#'
my_module.erl:3: Warning: record person is unused
error

ドキュメントには、レコードは実行時ではなくコンパイル時に利用できるため、rdがシェルで使用されると記載されています。したがって、モジュール定義でrdを使用する必要はないと思います。

4

2 に答える 2

5

複数のモジュールでレコードを使用する場合は、ヘッダーファイルに入れることができます(例foo.hrl)。

-record(foo, {bar, baz}).

次に、ヘッダーファイルを必要なモジュールにインクルードできます。

-include_lib("path/to/foo.hrl")

通常、これらのヘッダーファイルはincludeアプリケーションのディレクトリに配置されます。

編集:私はドキュメントから引用します:

include_libに似てincludeいますが、絶対ファイルを指摘するべきではありません。代わりに、最初のパスコンポーネント(おそらく変数置換後)がアプリケーションの名前であると見なされます。例:

-include_lib("kernel/include/file.hrl").

だから、私が書いたものは実際にはもっと真実であるようですinclude

于 2013-02-06T14:03:48.493 に答える
4

正しく定義しましたが、レコードは関数内でのみ使用できます(モジュール内にある場合)。

したがって、次のようなものを追加します

test_record() -> #person{name="dummy"}.

次に、Erlangシェルからの結果を次のように確認できます。

my_module:test_record()

于 2013-02-03T21:37:24.277 に答える