Test to see if a variable exists

So I am stealing all these identities and storing everything in a big
array of objects stolen_identity, and having the index be social
security numbers:

ss[34323843] = Stolen_identity.new

But say I pick up a paycheck stub and it has 3428294. How do I know if
I already have it? Does
if (exist ss[3428294]) then … end
work? How can I see if a variable exists?

Thanks.

(please include your social security with your answer)

On Jun 15, 2:36 pm, “Colin S.” [email protected] wrote:

So I am stealing all these identities and storing everything in a big
array of objects stolen_identity, and having the index be social
security numbers:

ss[34323843] = Stolen_identity.new

But say I pick up a paycheck stub and it has 3428294. How do I know if
I already have it? Does
if (exist ss[3428294]) then … end
work? How can I see if a variable exists?

Arrays (and Hashes) in Ruby are sparse - they only store the values
you actually enter. However, there are some limitations on the size of
indices for arrays:

C:>irb

irb(main):001:0> ss = []
=> []

irb(main):002:0> ss[ 884_56_2103 ] = “I HAVE YOU NOW”
ArgumentError: index too big
from (irb):2:in `[]=’
from (irb):2

So, you probably want to use a Hash, which has no such limitation.
With both Arrays and Hashes, supplying a key or index which has no
stored value will return a nil object:

irb(main):003:0> ss = {}
=> {}

irb(main):004:0> ss[ 884_56_2103 ] = “I HAVE YOU NOW”
=> “I HAVE YOU NOW”

irb(main):005:0> ss[ 912_34_3552 ]
=> nil

In Ruby, nil and false are both non-truth values for the purposes of
boolean logic. Additionally (and slightly more cleanly), you can ask a
Hash directly if it has an entry for a specific key:

irb(main):006:0> if ss.has_key?( 884_56_2103 ) then
irb(main):007:1* puts “I’m done with this guy”
irb(main):008:1> else
irb(main):009:1* puts “Sweet new information!”
irb(main):010:1> end
I’m done with this guy

On Jun 15, 2007, at 4:36 PM, Colin S. wrote:

Thanks.

(please include your social security with your answer)

Using a hash is the way to go here. You’ve already been advised to do
that. But here is an example that may give you some additional insight.

class Identity def initialize(ss) @ss = ss end def process puts "#{@ss}: I've been stolen!" end end

Stolen = {}

ss1 = ‘123-12-1234’
ss2 = ‘789-78-7890’
Stolen[ss1] = Identity.new(ss1)

One way

Stolen[ss1].process if Stolen[ss1] # process runs
Stolen[ss2].process if Stolen[ss2] # process does not run

Another way

Stolen[ss1].process rescue nil # process runs
Stolen[ss2].process rescue nil # process does not run

There are many other ways, but they all rely on same thing: that
Stolen[ss2] returns nil and nil is treated as false in boolean
expressions.

Regards, Morton

On Jun 15, 2007, at 4:58 PM, Morton G. wrote:

I already have it? Does

Stolen = {}
Stolen[ss1].process rescue nil # process runs

An array could indeed work. Think about the structure of a SSN:
377-23-4736 (not a real one)
That looks like a multi-dimensional array to me.
each part is limited: 3 digits, 2 digits, 4 digits.
Much like IPv4 this can produce a lot of distinct numbers.
These smaller parts are easier to process, possibly less overhead.

On Jun 16, 2007, at 9:03 AM, John J. wrote:

ss[34323843] = Stolen_identity.new

  puts "#{@ss}: I've been stolen!"

Stolen[ss1].process if Stolen[ss1] # process runs

Regards, Morton

An array could indeed work. Think about the structure of a SSN:
377-23-4736 (not a real one)
That looks like a multi-dimensional array to me.
each part is limited: 3 digits, 2 digits, 4 digits.
Much like IPv4 this can produce a lot of distinct numbers.
These smaller parts are easier to process, possibly less overhead.

I don’t doubt that Identity objects could be indexed into some kind
of array, but I do think the hash approach is simpler and easier to
implement. I’d be happy to be convinced otherwise. How about posting
some code to prove your point?

Regards, Morton

This forum is not affiliated to the Ruby language, Ruby on Rails framework, nor any Ruby applications discussed here.

| Privacy Policy | Terms of Service | Remote Ruby Jobs