2015-05-26 21 views
6

Bir başlık dosyasında bir işlev belirtmeye çalışıyorum. böylece gibi: birden çok farklı parametrelere sahiptir çünküErlang başlık dosyasında aynı işlev için birden çok özellik

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

Şimdi bu işlev için bazı ekstra şartname eklemek istiyorum.

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}. 

Bu ek özellikler, bu işlevdeki farklı parametreler için, başlık dosyasımda eklemek istiyorum. Bunu nasıl yapacağımı bilmiyorum, birileri bana yardım edebilir mi?

Bunu yapmaya çalıştım ama bana derleme hataları veriyor: önceden

-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()). 

teşekkür ederiz.

cevap

2

cevap burada Bulunan: http://erlang.org/doc/reference_manual/typespec.html

ı kullanmak zorunda ';'

değişiklik bu: bu işe

-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()). 

: doğrudur

-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()). 
+0

. Yine de neden bir başlık dosyasına koymak istediğinizi sorabilir miyim? –

+0

Kodumu sağlam yapmak ve çoğaltılabilecek işlevselliği vardır. –

+1

Geri çekme mekanizmasını davranışlarla kullanmayı düşündünüz mü? Tip spesifikasyonunu birçok yerde tekrar etmekten ziyade davranış tanımına koymanıza izin veriyorlar. –

İlgili konular