2011-07-17 27 views
5

Jaki jest prawidłowy rodzaj sekwencji? Mam ten kod:Typ sekwencji clojure

(defrecord MethodInfo [^clojure.lang.ISeq preconds ^clojure.lang.ISeq postconds]) 

Ale nie wydaje się, aby poprawnie egzekwować wymagania typu, ponieważ mogę napisać (new MethodInfo 1 2).

Odpowiedz

7

Rozumiem, że Clojure na Type Hints są tam tylko ze względu na wydajność, poprawić metody odnośnika przez side-stepping refleksji; To jest ich jedyny cel, a nie wymuszanie typów statycznych w dynamicznym języku.

Patrz: this answer to a similar question.

Edit:

Mówi się, że będzie mógł enforce primitive return types in some cases in Clojure 1.3, ale jest to wyraźnie coś, co jest w ruchu, a mimo to nie stosuje się do sekwencjonowania typy.

+1

W większości prawdziwe. Możesz wpisać tekst w definicji, a wygenerowany interfejs będzie miał pola odpowiedniego typu. Jest to jednak ściśle dla celów współpracy i masz rację, jeśli chodzi o brak egzekwowania typów statycznych w ogóle. – amalloy