Initialization of local variables

For some reason I feel a need to initialize variables in some cases as
the way “rec” is done in
the code below where I do “rec = nil”. I know ruby would initialize it
by default, but there are some scenarios where I am not sure that is
always the case, but I forget exactly except that it seems like it has
happened.

Can someone comment on this. I seem to carry over idioms from my C++
coding days …

def self.get(attr)
rec = nil
if id = params[:id]
rec = self.find_by_id(id)
else
guid = attr[:guid]
client_id = attr[:client_id]
rec = self.find(:first, :conditions =>
[“guid = :guid and cdr_client_id = :client”, {:guid =>
guid, :client => client_id}])
end
rec
end

On Wednesday, May 16, 2012 4:19:42 PM UTC+1, Jedrin wrote:

For some reason I feel a need to initialize variables in some cases as
the way “rec” is done in
the code below where I do “rec = nil”. I know ruby would initialize it
by default, but there are some scenarios where I am not sure that is
always the case, but I forget exactly except that it seems like it has
happened.

Hi Jedrin,

You may be thinking of scoping issues. If you need to access a local
variable in a block to set it’s value, and then use it outside of the
block, you will need to initialize it prior to the block.

def test_method
test_block do |val|
var = ‘FAIL’
end
puts var
end

will result in an ‘undefined local variable or method’ error. If you
initialise var prior to the block, then you can set the value in the
block,
and it will be accessible after the block as so:

def test_method
var = nil
test_block do |val|
var = ‘SUCCESS’
end
puts var
end

will result in ‘SUCCESS’ being output.

HTH

Paul

Ok, I guess that’s what it is, I know I have seen something like
that, it’s the code blocks that behave differently.

It’s sort of interesting that where branching is concerned it works
as bellow where local vars assignments that never get executed get set
to nil as in the value of k

def myfunc

x = 2
z = 1

if x
y = 3
if z == 3
k = 5
end
end

p y
p k

end

myfunc

I would be curious if someone could explain to me the philosophy of
why k works in my last example the way it does.

As far as the code blocks, I guess they can be standalone, closures,
what not. I’m a bit rusty on what you can do with that sort of thing,
though I have touched on it a bit …

I guess it kind of makes sense anyway. I feel I can write code better
since now I understand the distinction with the code blocks as opposed
to the branching …