我正在尝试在头文件中指定一个函数.像这样:
-spec update(pid(), tuple(tuple(), integer(), atom()), tuple(atom(), atom())) -> tuple(tuple(), integer(), atom()).
Run Code Online (Sandbox Code Playgroud)
现在我想为这个函数添加一些额外的规范,因为它有多个不同的参数.
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}.
Run Code Online (Sandbox Code Playgroud)
所以我想在我的头文件中为这个函数中的不同参数添加这些额外的规范.我不知道怎么做,有人可以帮我吗?
我尝试这样做,但它给了我编译错误:
-spec update(pid(), tuple(tuple(), integer(), atom()), tuple(atom(), atom())) -> …Run Code Online (Sandbox Code Playgroud) 我是Erlang的新手.我有一个学校项目使用ets:table.但在我想从ets:table中获取一些数据之前,我想使用if结构检查表是否为空.
if
ets:first(Cal) =/= '$end_of_table' ->
Event = ets:first(Cal),
{TimeAtStart, Ref} = Event,
NowTime = now(),
Ms = timer:now_diff(NowTime, TimeAtStart)div 1000
end,
Run Code Online (Sandbox Code Playgroud)
现在这给了我一个错误:非法的守卫表达.
我不知道我做错了什么,请帮忙.
友好的问候
大安