Why/When erl 是否给出警告:已过时的消息?

Why/When does erl give a Warning: obsolete message?

我在list.erl中有以下代码:

-module(list).
-export([average/1]).

average(X) when list(X) -> sum(X) / len(X).

sum([H|T]) -> H + sum(T);
sum([]) -> 0.

len([_|T]) -> 1 + len(T);
len([]) -> 0.

erl shell 中加载此模块会给出警告消息。

Erlang R16B03 (erts-5.10.4) [source] [64-bit] [smp:4:4] [async-threads:10] [kernel-poll:false]

Eshell V5.10.4  (abort with ^G)
1> c(list).
list.erl:4: Warning: list/1 obsolete
{ok,list}
2>

When/Why 会发生这种情况吗?谢谢

你需要使用 at guard is_list(X).

-module(list).
-export([average/1]).

average(X) when is_list(X) -> sum(X) / len(X).

sum([H|T]) -> H + sum(T);
sum([]) -> 0.

len([_|T]) -> 1 + len(T);
len([]) -> 0.