Erlang头文件中同一函数有多个规范

velaa5lx  于 2022-12-08  发布在  Erlang
关注(0)|答案(1)|浏览(141)

我尝试在头文件中指定一个函数。如下所示:

-spec update(pid(), tuple(tuple(), integer(), atom()), tuple(atom(), atom())) -> tuple(tuple(), integer(), atom()).

现在我想为这个函数添加一些额外的规范,因为它有多个不同的参数。

update(_Pid, {Specs, infinity, _State}, {Step}) ->
  timer:sleep(10000),
  {{Specs, infinity}, {Step}};
update(_Pid, {Specs, infinity, _State}, {ExtraInfo, Step}) ->
  timer:sleep(10000),
  {{Specs, infinity}, {ExtraInfo, Step}};
update(_Pid, {Specs, N, _State}, _Info) when N < 2 ->
  {Specs, N, stop};
update(_Pid, {Specs, N, _State}, {notTaken, Step}) ->
  {Specs, N, Step};
update(_Pid, {Specs, N, _State}, {taken, Step}) ->
  {Specs, N - 1, Step}.

所以我想在头文件中为这个函数的不同参数添加一些额外的说明,我不知道怎么做,有人能帮我吗?
我尝试这样做,但它给我编译错误:

-spec update(pid(), tuple(tuple(), integer(), atom()), tuple(atom(), atom())) -> tuple(tuple(), integer(), atom()).
-spec update(pid(), tuple(tuple(), atom(), atom()), tuple(integer(), atom())) -> tuple(tuple(), atom(), atom()).
-spec update(pid(), tuple(tuple(), atom(), atom()), tuple(atom())) -> tuple(tuple(), atom(), atom()).

先谢谢你。

41zrol4v

41zrol4v1#

我找到了答案here。我不得不使用分号;。我更改了以下内容:

-spec update(pid(), tuple(tuple(), integer(), atom()), tuple(atom(), atom())) -> tuple(tuple(), integer(), atom()).
-spec update(pid(), tuple(tuple(), atom(), atom()), tuple(integer(), atom())) -> tuple(tuple(), atom(), atom()).
-spec update(pid(), tuple(tuple(), atom(), atom()), tuple(atom())) -> tuple(tuple(), atom(), atom()).

变成这样:

-spec update(pid(), tuple(tuple(), integer(), atom()), tuple(atom(), atom())) -> tuple(tuple(), integer(), atom());
            (pid(), tuple(tuple(), atom(), atom()), tuple(integer(), atom())) -> tuple(tuple(), atom(), atom());
            (pid(), tuple(tuple(), atom(), atom()), tuple(atom())) -> tuple(tuple(), atom(), atom()).

相关问题