2016-04-05 12 views
2

alt türlerinin Uyarılar: Yapmak isterdim neyiİksir, Diyaliz Cihazı, Türleri ve ben '-Woverspecs' ile dialyzer çalıştıran ve bu uyarıyı almak am

@spec testU(a) :: a when a: %Backend.User{} 
def testU(u) do 
... 

şudur: Bu kod ile

room_channel.ex:143: 
Type specification 'Elixir.Backend.RoomChannel': 
testU(a) -> a when is_subtype(a,#{}) 
is a subtype of the success typing: 'Elixir.Backend.RoomChannel':testU(_) -> any() 

alt tip uyarısı ortadan kalkacak ve işlevimin kesin bir tanımını alabilmem için işlev tipini bir güvenlik görevlisi ile sabitleyin. Ben tahıl karşı kesiyorum -Woverspecs teşvik ve şüpheli değildir Erlang docs gördüğünüz

, bazı karmaşık fonksiyon bekçi olduğunu düşünebilirsiniz tek çözüm ...

Herhangi fikirler veya işaretçiler olarak?

cevap

2

-Woverspecs ile, Dialyzer'in kendi analizini daha fazla olan kısıtlayıcı türüne sahip olduğunuzda uyarı alırsınız.

Örneğinizde, testU işlevinin, argümanı a'dan farklı bir şey olduğunda da bir değer döndürmesi olasıdır. muhtemelen aradığınız ne

sizin şartname Diyaliz Cihazı çıkarabiliriz olandandaha müsamahakâr olduğunda uyarıları üreten, -Wunderspecs olduğunu.

+0

Sorunun amacı daha kısıtlayıcı olmaktır - bu mümkün veya pratik olsun – user3264325

+0

Dediklerim budur. Spesifikasyonlarınız "gevşek" olduğunda uyarılmak isterseniz, Wunderspec – aronisstav

+0

'u kullanmalısınız. Spesifikasyonlarımın kısıtlayıcı olmasını istiyorum. Örneğin, Int'leri bir işlev üzerinde zorlayan ve sonra yalnızca Ints'e izin veren bir koruma ekleyen bir kısıtlayıcı özellik hayal edebiliyorum. Ama daha karmaşık tipler için bir bekçi nasıl ekleyeceğimi bilemiyorum – user3264325

İlgili konular