Why does #instance_variable_get/set require an “@” sign in front of
the variable name? It’s not like there is any other valid instance
variable name, is there?
And why can’t #instance_variable_set take a hash to set more than one
variable at a time?
In message “Re: instance_variable_[gs]et”
on Thu, 27 Mar 2008 13:36:23 +0900, Trans [email protected]
writes:
|Why does #instance_variable_get/set require an “@” sign in front of
|the variable name? It’s not like there is any other valid instance
|variable name, is there?
Because it’s part of a method name.
|And why can’t #instance_variable_set take a hash to set more than one
|variable at a time?
In message “Re: instance_variable_[gs]et”
on Thu, 27 Mar 2008 13:36:23 +0900, Trans [email protected] writes:
|Why does #instance_variable_get/set require an “@” sign in front of
|the variable name? It’s not like there is any other valid instance
|variable name, is there?
Because it’s part of a method name.
Sorry matz, I don’t follow. What is “it” and what method name?
variable at a time?
Yes, of course. Facets has #instance_assign, but it just seems
instance_variable_set(variables)
How often is that really needed? I can remember only few cases where I
needed that - and those were probably more experimental.
On 27.03.2008 16:28, Trans wrote:
…
How often is that really needed? I can remember only few cases where I
needed that - and those were probably more experimental.
I’ve got a couple of methods in library code I use frequently that
initialize or populate an object from a hash using the loop above. I’ve
always thought it was kind of a pain (and inefficient) to have to
construct a string for each key.
Why couldn’t #instance_variable_set be agnostic about whether you refer
to ivars as “foo” or “@foo” ? I don’t see any ambiguity…
variables.each do |key, value|
instance_variable_set(“@#{key}”, value)
end
cleaner than
instance_variable_set(variables)
It won’t but he didn’t say that. And Florian G. showed you that
you can write your own method that do it for you. I don’t think that
Ruby should have built-in such a method. Using
instance_variable_[sg]et should be very rare (for example in
metaprogramming) and using such a loop even more.
On Thu, Mar 27, 2008 at 9:07 PM, Joel VanderWerf [email protected] wrote:
I’ve got a couple of methods in library code I use frequently that
initialize or populate an object from a hash using the loop above. I’ve
always thought it was kind of a pain (and inefficient) to have to
construct a string for each key.
Does it mean that everyone use/need it? I don’t think so.
Don’t see what that has to do with anything. There’s lots of core
methods that are rarely used. Have you used
Module:protected_method_defined? recently?
Why couldn’t #instance_variable_set be agnostic about whether you refer
to ivars as “foo” or “@foo” ? I don’t see any ambiguity…
I don’t know if it’s main reason but AFAIR Ruby internally use
instance variables without “@” character to store additional
information about object (but from Ruby you can’t get it).
That’s a good point, but my suggestion was for #instance_variable_set to
map both “foo” and “@foo” to the same entry in the table, namely the
entry for “@foo”. Hidden entries would remain hidden.
I think that most important is consistent. We use @ in code and the
same goes when we want get value by instance_variable_get method.
Why does #instance_variable_get/set require an “@” sign in front of
the variable name? It’s not like there is any other valid instance
variable name, is there?
On Thu, Mar 27, 2008 at 9:07 PM, Joel VanderWerf [email protected] wrote:
I’ve got a couple of methods in library code I use frequently that
initialize or populate an object from a hash using the loop above. I’ve
always thought it was kind of a pain (and inefficient) to have to
construct a string for each key.
Does it mean that everyone use/need it? I don’t think so.
Why couldn’t #instance_variable_set be agnostic about whether you refer
to ivars as “foo” or “@foo” ? I don’t see any ambiguity…
I don’t know if it’s main reason but AFAIR Ruby internally use
instance variables without “@” character to store additional
information about object (but from Ruby you can’t get it).
I think that most important is consistent. We use @ in code and the
same goes when we want get value by instance_variable_get method.
It won’t but he didn’t say that. And Florian G. showed you that
you can write your own method that do it for you. I don’t think that
Ruby should have built-in such a method. Using
instance_variable_[sg]et should be very rare (for example in
metaprogramming) and using such a loop even more.
As a DSL implementor I could not disagree more with you, obviously
there are many people who wrote the same code
each { |k,v|
ivar_set “@#{k}”, v
that would mean that it would be a nice feature to have, it would
simply be the most DRY solution to the problem (or DROP in this case).