If a ruby hash rubyhash has a key such as "hashkey" is there a way of
retrieving the value by the expression rubyhash["hashkey"] ?
It only seems logical that is rubyhash.has_key?("hashkey") returns true
rubyhash["hashkey"] should return a value, but it always gives an error.
I know the same can be achieved via with rubyhash.values_at("hashkey")
but it appears so inelegant to me.
I am trying to create an erb template which will use the hash keys here
such as directory1 directory2 for each directory and the for each
directory use hash key s such as directory, archivename etc, but I find
values_at rather inelegant.
I sorely hope there is some aspect to ruby hashes syntax that I am
missing.
Note how I tried that out in the irb shell. It lets you enter Ruby expressions and examine their output. This is a powerful ally when learning the rules of Ruby.
In short, something else is going on in your code. Hashes work as you expect.
I can only conclude that your problem is really other than what you think it is. I think you would be well advised to post the actual code that is producing the error.
Regards, Morton
···
On Jun 25, 2007, at 9:04 PM, Frank Church wrote:
If a ruby hash rubyhash has a key such as "hashkey" is there a way of
retrieving the value by the expression rubyhash["hashkey"] ?
It only seems logical that is rubyhash.has_key?("hashkey") returns true
rubyhash["hashkey"] should return a value, but it always gives an error.
I know the same can be achieved via with rubyhash.values_at("hashkey")
but it appears so inelegant to me.
If a ruby hash rubyhash has a key such as "hashkey" is there a way of
retrieving the value by the expression rubyhash["hashkey"] ?
It only seems logical that is rubyhash.has_key?("hashkey") returns true
rubyhash["hashkey"] should return a value, but it always gives an error.
I know the same can be achieved via with rubyhash.values_at("hashkey")
but it appears so inelegant to me.
I am trying to create an erb template which will use the hash keys here
such as directory1 directory2 for each directory and the for each
directory use hash key s such as directory, archivename etc, but I find
values_at rather inelegant.
I sorely hope there is some aspect to ruby hashes syntax that I am
missing.
I tracked the error, I was testing the using the concatenating strings
without using to_s in the code. ie.
I tracked the error, I was testing the using the concatenating strings
without using to_s in the code. ie.
puts "hashkey value is " + rubyhash["hashkey"]
instead of
"hashkey value is " + (rubyhash["hashkey"]).to_s
You could have saved yourself a lot trouble by using
puts "hashkey value is #{rubyhash["hashkey"]}"
Regards, Morton
I am learning Ruby step by step. There appear to be so many different
ways of achieving the same thing, coming from a more procedural
background, there are quite a number of things about the Ruby way I have
to learn.
As you can see from here
I have an even more troublesome question I can't locate. I will post it
when I find it.
The point to note about 'puts "hashkey value is #{rubyhash["hashkey"]}"' is that the interpreter calls to_s on the result of a #{...} evaluation, but String#+ is picky about is argument -- the argument must be a string. That means, as you have found out, that you must explicitly coerce anything not a string with to_s before passing it to String#+.
Regards, Morton
···
On Jun 26, 2007, at 7:45 AM, Frank Church wrote:
Morton Goldberg wrote:
You could have saved yourself a lot trouble by using
puts "hashkey value is #{rubyhash["hashkey"]}"
Regards, Morton
I am learning Ruby step by step. There appear to be so many different
ways of achieving the same thing, coming from a more procedural
background, there are quite a number of things about the Ruby way I have
to learn.