Discussion:
How to use defrecord getBasis to look up record instance field values
Andy Fingerhut
2018-12-03 07:47:07 UTC
Permalink
Maybe you are looking for something like this?

(map #(% p1) (map keyword (Person/getBasis)))

keyword can take a symbol as argument, and return a corresponding keyword.

Andy
defrecord Person [name age company])
(def p1 {:name "foo", :age 27, :company :bar})
(map #(% p1) (keys p1))
("foo" 27 :bar)
user=> (map #(% p1) (Person/getBasis))
(nil nil nil nil)
user=> (map #(class %) (Person/getBasis))
(clojure.lang.Symbol clojure.lang.Symbol clojure.lang.Symbol
clojure.lang.Symbol)
getBasis seems to return the symbol but my record lookup technique doesnt
seem to be working..
any idea why
I dont wish to use keys on the record instance since the instance might be
missing some fields in the record
--
You received this message because you are subscribed to the Google
Groups "Clojure" group.
Note that posts from new members are moderated - please be patient with
your first post.
To unsubscribe from this group, send email to
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
For more options, visit https://groups.google.com/d/optout.
--
You received this message because you are subscribed to the Google
Groups "Clojure" group.
To post to this group, send email to ***@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+***@googlegroups.com
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 clojure+***@googlegroups.com.
For more options, visit https://groups.google.com/d/optout.
Matching Socks
2018-12-03 10:00:21 UTC
Permalink
To be clear: In the example, p1 is not an instance of Person. p1 is just a
map. An actual record has (at least) all of the basis fields.

user> (map->Person {:name "foo"})
#user.Person{:name "foo", :age nil, :company nil}

user> (dissoc *1 :age)
{:name "foo", :company nil} ;; not a record anymore!

user> (assoc *2 :igloo 42)
#user.Person{:name "foo", :age nil, :company nil, :igloo 42}

As a rule of thumb, in Clojure one does not rush to records. If maps are
good enough, one uses maps.
--
You received this message because you are subscribed to the Google
Groups "Clojure" group.
To post to this group, send email to ***@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+***@googlegroups.com
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 clojure+***@googlegroups.com.
For more options, visit https://groups.google.com/d/optout.
Loading...