On 01.12.2006 13:35, Martin DeMello wrote: > On 12/1/06, Robert Klemme <shortcutter / googlemail.com> wrote: >> On 01.12.2006 13:14, Martin DeMello wrote: >> > Took me aback - there seems to be no reason for OpenStruct *not* to >> > permit member access via ostruct[:field] and ostruct['field']. >> >> OpenStruct also does not inherit Enumerable. I guess the story is, if >> you need a Hash then use a Hash. The key point of OpenStruct is that >> you can use arbitrary member setters and getters not indexed access. Is >> there actually a situation where you need both? > > I was trying to collect all the binary options to my app in a hash (as > being somewhat less verbose than the standard OptionParser syntax): > > { > :verbose => ["-v", "--[no-]verbose", "run verbosely"], > :all => ["-A", "--all", "select all files"], > #.... > }.each {|k,v| opt.on(*v) {|i| opts.send(:"#{k}=", i) } } > > The last line would have been a lot less ugly as opts[k] = i, and as I > said, there seems no real reason not to allow it. Hm... Personally I would prefer the slightly more verbose but less complex definition of options. Just my 0.02EUR. Btw, you can of course remedy this simply by just defining #[]= on instance opts the way you used it here. :-) Kind regards robert