无法匹配正确的功能

Rui*_* MA 1 erlang

这是我的代码:

-record(user,{id,name,group,age}).

adult_section(U=#user{})  when U#user.age  >=18   -> "allowed";

adult_section(_)    ->  "no permission".
Run Code Online (Sandbox Code Playgroud)

它可以用于:

>records_new:adult_section(#user{id=1,name='Ray',group=admin,age=10}).
  output:  "no permission"
Run Code Online (Sandbox Code Playgroud)

但是当我尝试这个:

> records_new:adult_section(#user{}).
  "allowed"
Run Code Online (Sandbox Code Playgroud)

我没有按照第二顺序给用户的年龄,为什么它可以工作,为什么不工作"no permission".

Dog*_*ert 6

由于您的记录没有默认值age,如果您创建记录而未指定值age,则默认为原子undefined.

1> #user{}.
#user{id = undefined,name = undefined,group = undefined,
      age = undefined}
Run Code Online (Sandbox Code Playgroud)

在Erlang中,原子比大于整数:

2> undefined > 18.
true
3> foo > 100000000.
true
Run Code Online (Sandbox Code Playgroud)

如果您指定age的默认值,例如0,您的函数按预期工作:

-record(user,{id,name,group,age = 0}).
Run Code Online (Sandbox Code Playgroud)
1> #user{}.
#user{id = undefined,name = undefined,group = undefined,
      age = 0}
2> a:adult_section(#user{}).
"no permission"
Run Code Online (Sandbox Code Playgroud)