I haven't quite figured out type hinting either, but here's one thing I realized I was doing wrong that you might want to try.
(.length msg) is a reader macro that expands to (. msg length). The docs for the . special form state that if no arguments are provided for an instance member, it is assumed to be a field. You can specify that it is a no-argument method by instead writing (. msg (length)). Whether that will fix the issue you're having I don't know, but it should be a step in the right direction. On Aug 31, 2:20 pm, Albert Cardona <sapri...@gmail.com> wrote: > Hi all, > > I am puzzled by the type hint support in deftype. > I can add type hints to defprotocol: > > user=> (defprotocol PTest > (test-it ^boolean [this ^String msg])) > PTest > > … but adding them to deftype fails: > > user=> (deftype Test [^String name] > PTest > (test-it [this msg] (str "test " name ": " msg \space (.length msg)))) > java.lang.IllegalArgumentException: Can't find matching method: > test_it, leave off hints for auto match. (NO_SOURCE_FILE:1) > > So I write the deftype without type hints: > > user=> (deftype Test [^String name] > PTest > (test-it [this msg] (str "test " name ": " msg \space (.length msg)))) > user.Test > > But then, I get reflection warnings: > > user=> (set! *warn-on-reflection* true) > true > > user=> (test-it (Test. "one") "two") > "test one: two 3" > > 8/31/10 11:11:49 PM [0x0-0x29029].org.fiji[382] Reflection warning, > NO_SOURCE_PATH:3 - reference to field length can't be resolved. > > In any case "length" is a method, not a field, in String. > > The above is just a minimal example. I am experiencing this issue in > just about all deftype that I need to type-hint. > > The error when type-hinting suggests that the latter is unnecessary, > that it could be deduced from the hints in the protocol > definition--but that is not the case. > > What am I missing? Thanks for any help. > > Albert > > --http://albert.rierol.net -- You received this message because you are subscribed to the Google Groups "Clojure" group. To post to this group, send email to clojure@googlegroups.com Note that posts from new members are moderated - please be patient with your first post. To unsubscribe from this group, send email to clojure+unsubscr...@googlegroups.com For more options, visit this group at http://groups.google.com/group/clojure?hl=en