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 -- You received this message because you are subscribed to the Google Groups "Ruby on Rails: Talk" group. To post to this group, send email to rubyonrails-talk-/JYPxA39Uh5TLH3MbocFF+G/Ez6ZCGd0@public.gmane.org To unsubscribe from this group, send email to rubyonrails-talk+unsubscribe-/JYPxA39Uh5TLH3MbocFF+G/Ez6ZCGd0@public.gmane.org For more options, visit this group at http://groups.google.com/group/rubyonrails-talk?hl=en.
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> 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 > >-- You received this message because you are subscribed to the Google Groups "Ruby on Rails: Talk" group. To view this discussion on the web visit https://groups.google.com/d/msg/rubyonrails-talk/-/MHuUYU5FIcwJ. To post to this group, send email to rubyonrails-talk-/JYPxA39Uh5TLH3MbocFF+G/Ez6ZCGd0@public.gmane.org To unsubscribe from this group, send email to rubyonrails-talk+unsubscribe-/JYPxA39Uh5TLH3MbocFF+G/Ez6ZCGd0@public.gmane.org For more options, visit this group at http://groups.google.com/group/rubyonrails-talk?hl=en.
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 --------------------------- run: 3 nil -- You received this message because you are subscribed to the Google Groups "Ruby on Rails: Talk" group. To post to this group, send email to rubyonrails-talk-/JYPxA39Uh5TLH3MbocFF+G/Ez6ZCGd0@public.gmane.org To unsubscribe from this group, send email to rubyonrails-talk+unsubscribe-/JYPxA39Uh5TLH3MbocFF+G/Ez6ZCGd0@public.gmane.org For more options, visit this group at http://groups.google.com/group/rubyonrails-talk?hl=en.
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 .. -- You received this message because you are subscribed to the Google Groups "Ruby on Rails: Talk" group. To post to this group, send email to rubyonrails-talk-/JYPxA39Uh5TLH3MbocFF+G/Ez6ZCGd0@public.gmane.org To unsubscribe from this group, send email to rubyonrails-talk+unsubscribe-/JYPxA39Uh5TLH3MbocFF+G/Ez6ZCGd0@public.gmane.org For more options, visit this group at http://groups.google.com/group/rubyonrails-talk?hl=en.
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 .. -- You received this message because you are subscribed to the Google Groups "Ruby on Rails: Talk" group. To post to this group, send email to rubyonrails-talk-/JYPxA39Uh5TLH3MbocFF+G/Ez6ZCGd0@public.gmane.org To unsubscribe from this group, send email to rubyonrails-talk+unsubscribe-/JYPxA39Uh5TLH3MbocFF+G/Ez6ZCGd0@public.gmane.org For more options, visit this group at http://groups.google.com/group/rubyonrails-talk?hl=en.