On 24.04.2010, at 05:48, Mark Engelberg wrote:
> As far as I know, Clojure doesn't currently make any attempt to
> address this problem of allowing a standard way to access public data
> from an object, while preserving the option of doing something more
> sophisticated later. So a programmer is still forced to choose
> between the convenience of keyword lookup of data, versus a protocol
> filled with "get-name" functions to preserve future flexibility.
This is basically a question of how you choose your abstractions (the
documented interfaces) and your implementations (the data structures), and in
particular on where you draw the boundaries. That is a design issue, so I don't
expect any language feature to remove the necessity to think about this
carefully.
> For this reason, I've always found appealing languages which let you
> optionally write getter/setter methods that "hook into" the standard
> field access syntax.
That's little more than syntactic sugar, considering that field access is
equivalent to calling a method with no arguments.
The closest equivalent in Clojure would be to define a functional accessor API
for all access to your data. A first implementation would simply set the
accessor to be a field-name keyword:
(defrecord foo [bar baz])
(def get-bar :bar)
(def get-baz :baz)
If necessary you can then replace the accessor functions by something more
complicated, or turn them into prototype functions to allow multiple
implementations. Client code won't see the difference.
Konrad.
--
You received this message because you are subscribed to the Google
Groups "Clojure" group.
To post to this group, send email to [email protected]
Note that posts from new members are moderated - please be patient with your
first post.
To unsubscribe from this group, send email to
[email protected]
For more options, visit this group at
http://groups.google.com/group/clojure?hl=en