erlang 检查记录中是否存在值?

iqxoj9l9  于 2022-12-16  发布在  Erlang
关注(0)|答案(1)|浏览(108)

假设我有一个名为#parameters的记录,我正在从外部访问它,我不知道它里面的所有键是否都存储了一个值。
假设在我的记录中有一个名为Index的键,我如何检查Index的值是否存在于我的记录中?我如何将它放入case语句中,例如:

Index = find from the record  
or else put it as 100.
1bqhqjot

1bqhqjot1#

我从外部访问它,并且不知道它内部的所有键是否都存储了值。
记录中的所有字段都有一个值。如果记录定义中没有指定字段的默认值,则erlang使用atom undefined作为默认值。例如:

-module(a).
-compile(export_all).

-record(pattern, {a, b=0, c}).

go() ->
    #pattern{a=1}.

在 shell 中,

1> c(a).
a.erl:2:2: Warning: export_all flag enabled - all functions will be exported
%    2| -compile(export_all).
%     |  ^
{ok,a}

2> rr(a).
[pattern]

3> a:go().
#pattern{a = 1,b = 0,c = undefined}

假设我的记录中有一个名为Index的键;我如何检查索引的值是否存在于我的记录中?
同样,index键总是有一个值,下面的例子演示了如果index的值为undefined,如何做一件事,如果index的值为其他值,如何做其他事情。

-module(a).
-compile(export_all).

-record(pattern, {a, b=0, index}).

go() ->
    Pattern1 = #pattern{a=1},
    check_index(Pattern1),
    Pattern2 = #pattern{a=1, index=10},
    check_index(Pattern2).

check_index(#pattern{index=undefined}) ->
    io:format("index key is undefined~n");
check_index(#pattern{index=Number}) ->
    io:format("index key is ~w~n", [Number]).

在 shell 中:

1> c(a).  
a.erl:2:2: Warning: export_all flag enabled - all functions will be exported
%    2| -compile(export_all).
%     |  ^
{ok,a}

2> rr(a). 
[pattern]

3> a:go().
index key is undefined
index key is 10
ok

您还可以将check_index()函数转换为返回true或false的布尔函数。

相关问题