Steven D'Aprano <steve+comp.lang.pyt...@pearwood.info> wrote: > On Mon, 24 Sep 2012 00:14:23 +0100, Mark Lawrence wrote: > >> Purely for fun I've been porting some code to Python and came across >> the singletonMap[1]. I'm aware that there are loads of recipes on >> the web for both singletons e.g.[2] and immutable dictionaries >> e.g.[3]. I was wondering how to combine any of the recipes to >> produce the best implementation, where to me best means cleanest and >> hence most maintainable. I then managed to muddy the waters for >> myself by recalling the Alex Martelli Borg pattern[4]. Possibly or >> even probably the latter is irrelevant, but I'm still curious to know >> how you'd code this beast. >> >> First prize for the best solution is a night out with me, no guesses >> what the second prize is :) >> >> [1]http://docs.oracle.com/javase/1.4.2/docs/api/java/util/ > Collections.html > > Copied from that page: > > "static Map singletonMap(Object key, Object value) > Returns an immutable map, mapping only the specified key to the > specified value." > > I don't see the point of this. It takes a single key, with a single > value, and is immutable so you can't change it or add new keys. What's > the point? Why bother storing the key:value pair in a data structure, > then look up the same data structure to get the same value every time? > > # Pseudo-code > d = singletonMap(key, calculate(key)) > # later: > value = d[key] # there's only one key this could be > process(value) > > > Why not just store the value, instead of key, value and mapping? > > value = calculate(key) > # later > process(value) > > > Google is your friend. Searching for "java singletonMap" gives this as the second hit:
http://stackoverflow.com/questions/7125536/when-would-i-use-java-collections-singletonmap-method The answers seem to be that it's for all those cases in Java where you have a method that takes a map as an argument and you want to pass in a map with a single kep/value pair. In that case it lets you replace 3 lines of Java with 1. e.g. from the comments: "If you have a simple select statement like "select foo from bar where id = :barId" then you would need a parameter map with a single key-value pair, barId=123. That's a great place to use singletonMap()" Of course in Python you just use a dict literal in that case so it's pointless. -- Duncan Booth http://kupuguy.blogspot.com -- http://mail.python.org/mailman/listinfo/python-list