How to access record in a hashmap

84 views
Skip to first unread message

Cecil Westerhof

unread,
Jul 9, 2014, 9:48:53 AM7/9/14
to clo...@googlegroups.com
When you have:
(def object-locations {
     'whiskey   'living-room
     'bucket    'living-room
     'chain     'garden
     'frog      'garden
     'dummy     'nowhere
     'test      'nowhere
     })

You can retrieve the location of the bucket with:
    (object-locations 'bucket)
and with:
    ('bucket object-locations)

Personally I find the first better, but ‘Clojure Programming' uses the second possibility. What is the better way and why?

--
Cecil Westerhof

Thomas Heller

unread,
Jul 9, 2014, 11:03:27 AM7/9/14
to clo...@googlegroups.com
Short and simple answer: NullPointerException

(def object-locations nil)

(object-locations 'bucket) will throw
('bucket object-locations) => nil

HTH,
/thomas

Thomas Heller

unread,
Jul 9, 2014, 11:18:36 AM7/9/14
to clo...@googlegroups.com
Oh and its rare (outside of macros) to use symbols like that. Usually you'd use keywords.

(def object-locations
  {:whiskey :living-room})


--
You received this message because you are subscribed to the Google
Groups "Clojure" group.
To post to this group, send email to clo...@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+u...@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 a topic in the Google Groups "Clojure" group.
To unsubscribe from this topic, visit https://groups.google.com/d/topic/clojure/4KAuyAs34-s/unsubscribe.
To unsubscribe from this group and all its topics, send an email to clojure+u...@googlegroups.com.
For more options, visit https://groups.google.com/d/optout.

Cecil Westerhof

unread,
Jul 9, 2014, 11:24:49 AM7/9/14
to clo...@googlegroups.com
2014-07-09 17:03 GMT+02:00 Thomas Heller <th.h...@gmail.com>:
Short and simple answer: NullPointerException

(def object-locations nil)

(object-locations 'bucket) will throw
('bucket object-locations) => nil

​That is interesting.​
 
​Not a problem, because it will never be ​nil, but always a HashMap. But better save as sorry. I will change it.

 
On Wednesday, July 9, 2014 3:48:53 PM UTC+2, Cecil Westerhof wrote:
When you have:
(def object-locations {
     'whiskey   'living-room
     'bucket    'living-room
     'chain     'garden
     'frog      'garden
     'dummy     'nowhere
     'test      'nowhere
     })

You can retrieve the location of the bucket with:
    (object-locations 'bucket)
and with:
    ('bucket object-locations)

Personally I find the first better, but ‘Clojure Programming' uses the second possibility. What is the better way and why?

--
Cecil Westerhof

Cecil Westerhof

unread,
Jul 9, 2014, 11:30:21 AM7/9/14
to clo...@googlegroups.com
2014-07-09 17:18 GMT+02:00 Thomas Heller <th.h...@gmail.com>:
Oh and its rare (outside of macros) to use symbols like that. Usually you'd use keywords.

(def object-locations
  {:whiskey :living-room})

​It is from 'Land of Lisp'. The symbols are printed. Or is it possible to print the keyword without the :?
 
 
On Wed, Jul 9, 2014 at 5:03 PM, Thomas Heller <th.h...@gmail.com> wrote:
Short and simple answer: NullPointerException

(def object-locations nil)

(object-locations 'bucket) will throw
('bucket object-locations) => nil

HTH,
/thomas

On Wednesday, July 9, 2014 3:48:53 PM UTC+2, Cecil Westerhof wrote:
When you have:
(def object-locations {
     'whiskey   'living-room
     'bucket    'living-room
     'chain     'garden
     'frog      'garden
     'dummy     'nowhere
     'test      'nowhere
     })

You can retrieve the location of the bucket with:
    (object-locations 'bucket)
and with:
    ('bucket object-locations)

Personally I find the first better, but ‘Clojure Programming' uses the second possibility. What is the better way and why?

--
Cecil Westerhof

Timothy Baldridge

unread,
Jul 9, 2014, 11:32:43 AM7/9/14
to clo...@googlegroups.com
(name :foo)

will return the name as a string

(symbol (name :foo))

Converts the name of the keyword to a symbol


--
You received this message because you are subscribed to the Google
Groups "Clojure" group.
To post to this group, send email to clo...@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+u...@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+u...@googlegroups.com.

For more options, visit https://groups.google.com/d/optout.



--
“One of the main causes of the fall of the Roman Empire was that–lacking zero–they had no way to indicate successful termination of their C programs.”
(Robert Firth)

Thomas Heller

unread,
Jul 9, 2014, 11:33:12 AM7/9/14
to clo...@googlegroups.com
Don't know Land of Lisp, but if you print it you can use (name :whiskey) to get "whiskey" (as a String), also works on (name 'whiskey).


--

Cecil Westerhof

unread,
Jul 9, 2014, 11:50:26 AM7/9/14
to clo...@googlegroups.com
2014-07-09 17:32 GMT+02:00 Timothy Baldridge <tbald...@gmail.com>:
(name :foo)

will return the name as a string

(symbol (name :foo))

Converts the name of the keyword to a symbol

​It is not even necessary. I changed to keywords. The code uses:
    `(You see a ~obj on the floor.)

And it is displayed as:
You see a whiskey on the floor.
You see a bucket on the floor.

Maybe it does not work in all cases: so I need to do some testing.
​Let change the rest also to keywords.​

--
Cecil Westerhof

Cecil Westerhof

unread,
Jul 9, 2014, 11:58:51 AM7/9/14
to clo...@googlegroups.com
2014-07-09 17:50 GMT+02:00 Cecil Westerhof <cldwes...@gmail.com>:
2014-07-09 17:32 GMT+02:00 Timothy Baldridge <tbald...@gmail.com>:

(name :foo)

will return the name as a string

(symbol (name :foo))

Converts the name of the keyword to a symbol

​It is not even necessary. I changed to keywords. The code uses:
    `(You see a ~obj on the floor.)

And it is displayed as:
You see a whiskey on the floor.
You see a bucket on the floor.

Maybe it does not work in all cases: so I need to do some testing.
​Let change the rest also to keywords.​

​It seems to work. The only 'problem' is that I​
 
​need to use:
    (pickup :bucket)
instead of:
    (pickup 'bucket)​

But that is only temporary, because there will be an optimisation later on.

--
Cecil Westerhof
Reply all
Reply to author
Forward
0 new messages