why does openstruct not respond to [] and []=?

M

Martin DeMello

Took me aback - there seems to be no reason for OpenStruct *not* to
permit member access via ostruct[:field] and ostruct['field'].

martin
 
R

Robert Klemme

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?

Kind regards

robert
 
M

Martin DeMello

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.

martin
 
Y

Yukihiro Matsumoto

Hi,

In message "Re: why does openstruct not respond to [] and []=?"

|{
| :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.

Is there any reason that you have to use OpenStruct instead of plain
hash as opts?

matz.
 
R

Robert Klemme

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
 
M

Martin DeMello

In message "Re: why does openstruct not respond to [] and []=?"
|{
| :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.

Is there any reason that you have to use OpenStruct instead of plain
hash as opts?

In the rest of the code I'd far rather use opts.option than
opts[:eek:ption] - the latter ends up looking cluttered.

martin
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Members online

No members online now.

Forum statistics

Threads
474,219
Messages
2,571,118
Members
47,733
Latest member
BlairMeado

Latest Threads

Top