Hi, I am new to Ruby and still finding it very strange even though I am
enjoying learning it immensely.
I have this code:
if an_array.assoc(tag_name) == nil
…
and of course it doesn’t work because I either get an array back or a
nil object. It makes it very difficult to have a simple if statement
like the above that can handle both eventualities. I don’t need the
array returned, I just need to check to see if the element exists to
take a certain action.
What is the Ruby way of doing this?
Thanks,
Chad.
Alle 20:52, venerdì 8 dicembre 2006, Chad T. ha scritto:
like the above that can handle both eventualities. I don’t need the
array returned, I just need to check to see if the element exists to
take a certain action.
What is the Ruby way of doing this?
Thanks,
Chad.
In ruby everything evaluates to true in conditionals, except false and
nil.
So, you can do something like
if an_array.assoc(tag_name) #the element has been found
…
else #in this case assoc returned nil because no element was found
…
end
I hope this answeres your question.
Stefano
It might be include? (the question mark is part of the method name)
An example of include?'s usage:
irb(main):001:0> array = [“a”, “b”, “c”]
=> [“a”, “b”, “c”]
irb(main):002:0> array.include? “a”
=> true
irb(main):003:0> array.include? “z”
=> false
Daniel F. wrote:
It might be include? (the question mark is part of the method name)
An example of include?'s usage:
irb(main):001:0> array = [“a”, “b”, “c”]
=> [“a”, “b”, “c”]
irb(main):002:0> array.include? “a”
=> true
irb(main):003:0> array.include? “z”
=> false
Thing is its an array of arrays so I need to use the assoc method.
Anyway I figured it out, the code should have read:
if !masters.assoc(row[“tag”])
I was being dense and coding at a quarter to 2am on a friday night is
never an advisable thing 
Chad T. wrote:
Daniel F. wrote:
It might be include? (the question mark is part of the method name)
An example of include?'s usage:
irb(main):001:0> array = [“a”, “b”, “c”]
=> [“a”, “b”, “c”]
irb(main):002:0> array.include? “a”
=> true
irb(main):003:0> array.include? “z”
=> false
Thing is its an array of arrays so I need to use the assoc method.
Anyway I figured it out, the code should have read:
if !masters.assoc(row[“tag”])
I was being dense and coding at a quarter to 2am on a friday night is
never an advisable thing 
Or you could write
unless masters.assoc(row[“tag”])
This seems to be more Rubyish practice from what I’ve seen.
Actually, I am still having trouble. My code is:
res = dbh.query(“SELECT tag …blah blah”)
masters = Array.new
res.each_hash do |row|
p row[“tag”]
if masters.assoc(row[“tag”])
newMaster = { “subtags” => Array.new, “master” => ‘a’ }
masters.push [row[“tag”], newMaster]
end
…
And here is my output:
“852”
./prep_tags_yaml_02.rb:65: undefined method `[]’ for nil:NilClass
(NoMethodError)
from ./prep_tags_yaml_02.rb:8
I tried populating the “masters” array with an init line like:
masters = [[“asdf”, “agf”], [“bb”, “behe”]]
and it works, but this doesn’t help as the array has top be empty to
begin with. Puzzling…