Warning: Syntax rant.
I don’t find Clojure’s (.method obj) and (.-field obj) syntax very pleasing. Is there any compelling reason that Kawa’s syntax (obj:method) and (obj:field) Java interop wasn’t adopted?
Warning: Syntax rant.
I don’t find Clojure’s (.method obj) and (.-field obj) syntax very pleasing. Is there any compelling reason that Kawa’s syntax (obj:method) and (obj:field) Java interop wasn’t adopted?
(.method obj) seems more consistent with the (f obj) used for non-interop calls.
Right, and it means that things like the threading operators (-> etc) work consistently. It’s a pain for completion though.
Well, if one think of it in terms of generic functions I could agree, but when writing code in OO languages I tend to think in terms of Smalltalk message passing, in which case the receiver comes first. Racket also has a single-dispatch object system in which the receiver comes before the receiver. But yes, Clojure not being particularly OO-focused language I guess I need to reconsider.
This makes a lot of sense, thank you. I sympathize with you regarding the completion. 
I think you get used to it.
Also, in case you didn’t know, you can use .. to make it receiver first.
(.. "1234" length)
Or ->
(-> "1234" .length)
Notice the difference though, .. also adds the . while -> only changes the order.
And, how does Kawa handle chaining? When methods have extra args?
(.. someObj (withName "John") (withAge 23))
For example?
Good question! I’ll see if I can find out.
This topic was automatically closed 182 days after the last reply. New replies are no longer allowed.