The docstring for 'get' says nothing explicit about vectors ("Returns the
value mapped to key, not-found or nil if key not present.") but most of us
know that vectors can be viewed as associative data structures where
indexes are like keys:
(get [\a \b \c] 1)
\b
'get' also works on strings:
(get "abc" 1)
\b
However, strings are not treated as vectors or maps in other contexts:
(assoc "abc" 1 \Z)
ClassCastException java.lang.String cannot be cast to
clojure.lang.Associative
This combination of behaviors is confusing. If strings are vectors, then
'assoc' and other similar functions should work with them, and maybe I
should be able to do this to index into a string:
("abc" 1)
ClassCastException java.lang.String cannot be cast to clojure.lang.IFn
If strings are not vectors, then they seem to be a special case for 'get'.
One might argue that the very terse docstring for 'get' should note its use
with vectors, but once you understand the sense in which vectors are like
maps, the of 'get' use with vectors is implicitly covered by what the
docstring says. However, the use of 'get' with strings is not implicitly
covered by what the docstring says. If it was, then the last two examples
I gave should work.
(I'd be willing to file a ticket on this, but the puzzling behavior is not
new, and I suspect that there's something I'm not understanding.)
--
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
---
You received this message because you are subscribed to the Google Groups
"Clojure" group.
To unsubscribe from this group and stop receiving emails from it, send an email
to [email protected].
For more options, visit https://groups.google.com/d/optout.