what is a different? @name and name on ruby? sometime I confuse these.. --~--~---------~--~----~------------~-------~--~----~ 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-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org To unsubscribe from this group, send email to rubyonrails-talk-unsubscribe-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org For more options, visit this group at http://groups.google.com/group/rubyonrails-talk?hl=en -~----------~----~----~----~------~----~------~--~---
OnRails <zzzlai-PkbjNfxxIARBDgjK7y7TUQ@public.gmane.org> wrote:> > what is a different? @name and name on ruby? sometime I confuse these..http://www.ruby-doc.org/core/classes/Module.html#M001701 --~--~---------~--~----~------------~-------~--~----~ 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-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org To unsubscribe from this group, send email to rubyonrails-talk-unsubscribe-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org For more options, visit this group at http://groups.google.com/group/rubyonrails-talk?hl=en -~----------~----~----~----~------~----~------~--~---
On Oct 19, 2007, at 10:31 AM, OnRails wrote:> what is a different? @name and name on ruby? sometime I confuse > these..@name is an "instance variable" name is a local variable. In a class, like the one below, @birthdate is used in two places: in getBirthdate and in ageNow. In order to use it inside more than one method it needs to be an instance variable (a var with an @). However, in ageNow, we create a local var called currentDate (it has no @). It is used in the formula to calculate age. We also need the current date in dateToday, but we cannot reuse the ''currentDate'' var because it is local to only the ageNow method. So, in dateToday we create another local var dateOfToday. class Person def initialize @birthdate = ''1950-06-15'' end def getBirthday return @birthdate end def ageNow currentDate = Date.now ageInYears = Integer.new currentDate - @birthdate = ageInYears # fake formula return ageInYears end def dateToday dateOfToday = Date.now return dateOfToday end end -- gw --~--~---------~--~----~------------~-------~--~----~ 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-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org To unsubscribe from this group, send email to rubyonrails-talk-unsubscribe-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org For more options, visit this group at http://groups.google.com/group/rubyonrails-talk?hl=en -~----------~----~----~----~------~----~------~--~---
On Oct 19, 11:11 am, Greg Willits <li...-0Bv1hcaDFPRk211Z5VL+QA@public.gmane.org> wrote:> On Oct 19, 2007, at 10:31 AM, OnRails wrote: > > > what is a different? @name and name on ruby? sometime I confuse > > these.. > > @name is an "instance variable" > > name is a local variable. > > In a class, like the one below, @birthdate is used in two places: in > getBirthdate and in ageNow. In order to use it inside more than one > method it needs to be an instance variable (a var with an @). > However, in ageNow, we create a local var called currentDate (it has > no @). It is used in the formula to calculate age. We also need the > current date in dateToday, but we cannot reuse the ''currentDate'' var > because it is local to only the ageNow method. So, in dateToday we > create another local var dateOfToday. > > class Person > > def initialize > @birthdate = ''1950-06-15'' > end > > def getBirthday > return @birthdate > end > > def ageNow > currentDate = Date.now > ageInYears = Integer.new > > currentDate - @birthdate = ageInYears # fake formula > > return ageInYears > end > > def dateToday > dateOfToday = Date.now > return dateOfToday > end > > end > > -- gwThank you, gw!. I got it!! --~--~---------~--~----~------------~-------~--~----~ 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-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org To unsubscribe from this group, send email to rubyonrails-talk-unsubscribe-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org For more options, visit this group at http://groups.google.com/group/rubyonrails-talk?hl=en -~----------~----~----~----~------~----~------~--~---
Does that mean that @birthdate will be accessible to other classes outside this one? Elle On Oct 20, 11:01 am, OnRails <zzz...-PkbjNfxxIARBDgjK7y7TUQ@public.gmane.org> wrote:> On Oct 19, 11:11 am, Greg Willits <li...-0Bv1hcaDFPRk211Z5VL+QA@public.gmane.org> wrote: > > > > > On Oct 19, 2007, at 10:31 AM, OnRails wrote: > > > > what is a different? @name and name on ruby? sometime I confuse > > > these.. > > > @name is an "instance variable" > > > name is a local variable. > > > In a class, like the one below, @birthdate is used in two places: in > > getBirthdate and in ageNow. In order to use it inside more than one > > method it needs to be an instance variable (a var with an @). > > However, in ageNow, we create a local var called currentDate (it has > > no @). It is used in the formula to calculate age. We also need the > > current date in dateToday, but we cannot reuse the ''currentDate'' var > > because it is local to only the ageNow method. So, in dateToday we > > create another local var dateOfToday. > > > class Person > > > def initialize > > @birthdate = ''1950-06-15'' > > end > > > def getBirthday > > return @birthdate > > end > > > def ageNow > > currentDate = Date.now > > ageInYears = Integer.new > > > currentDate - @birthdate = ageInYears # fake formula > > > return ageInYears > > end > > > def dateToday > > dateOfToday = Date.now > > return dateOfToday > > end > > > end > > > -- gw > > Thank you, gw!. I got it!!--~--~---------~--~----~------------~-------~--~----~ 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-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org To unsubscribe from this group, send email to rubyonrails-talk-unsubscribe-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org For more options, visit this group at http://groups.google.com/group/rubyonrails-talk?hl=en -~----------~----~----~----~------~----~------~--~---
No, that is an instance variable of that class so it will only be available to a particular instance (not entirely true because of the rather rude instance_variable_get method). You can write an accessor method to allow access to it. That is the whole point of encapsulation, to provide an interface to the implementation and shield the user of your class from the gory details. I would suggest reading up on basic object oriented principals (Ruby specific or otherwise) as since everything in Ruby is an object, a good understanding of these principles will be a major help. You should look at the book "Programming Ruby" aka the "Pickaxe" book. It is very well written and has all the information you could want on this subject. -Bill elle wrote:> Does that mean that @birthdate will be accessible to other classes > outside this one? > > > Elle > > > On Oct 20, 11:01 am, OnRails <zzz...-PkbjNfxxIARBDgjK7y7TUQ@public.gmane.org> wrote: > >> On Oct 19, 11:11 am, Greg Willits <li...-0Bv1hcaDFPRk211Z5VL+QA@public.gmane.org> wrote: >> >> >> >> >>> On Oct 19, 2007, at 10:31 AM, OnRails wrote: >>> >>>> what is a different? @name and name on ruby? sometime I confuse >>>> these.. >>>> >>> @name is an "instance variable" >>> >>> name is a local variable. >>> >>> In a class, like the one below, @birthdate is used in two places: in >>> getBirthdate and in ageNow. In order to use it inside more than one >>> method it needs to be an instance variable (a var with an @). >>> However, in ageNow, we create a local var called currentDate (it has >>> no @). It is used in the formula to calculate age. We also need the >>> current date in dateToday, but we cannot reuse the ''currentDate'' var >>> because it is local to only the ageNow method. So, in dateToday we >>> create another local var dateOfToday. >>> >>> class Person >>> >>> def initialize >>> @birthdate = ''1950-06-15'' >>> end >>> >>> def getBirthday >>> return @birthdate >>> end >>> >>> def ageNow >>> currentDate = Date.now >>> ageInYears = Integer.new >>> >>> currentDate - @birthdate = ageInYears # fake formula >>> >>> return ageInYears >>> end >>> >>> def dateToday >>> dateOfToday = Date.now >>> return dateOfToday >>> end >>> >>> end >>> >>> -- gw >>> >> Thank you, gw!. I got it!! >> > > > > >-- Sincerely, William Pratt --~--~---------~--~----~------------~-------~--~----~ 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-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org To unsubscribe from this group, send email to rubyonrails-talk-unsubscribe-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org For more options, visit this group at http://groups.google.com/group/rubyonrails-talk?hl=en -~----------~----~----~----~------~----~------~--~---
>> Does that mean that @birthdate will be accessible to other classes >> outside this one?Not different classes: the "scope" of a variable determines how visible it is to other parts of the application. A local variable (name, with no @ or @@) is visible/accessible/usable only within the method in which it is defined. An instance variable, one defined with the @ sign, like @name is visible anywhere within the class, or a subclass ... but not, directly to any other class. Now this gets a little confusing in Rails because Rails does some special magic for you. In specific, when you define a model, for example Employee, and that model is tied to a database with a table called employees, all of the columns of that database table, like "name", "salary", "start_date" and so on become magically defined as instance variables of the model. You won''t see anything in the model that defines @name as anything, but if the employee table has a column called name, you have a free instance variable which you can reference as @name. Cool, eh? Tom --~--~---------~--~----~------------~-------~--~----~ 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-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org To unsubscribe from this group, send email to rubyonrails-talk-unsubscribe-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org For more options, visit this group at http://groups.google.com/group/rubyonrails-talk?hl=en -~----------~----~----~----~------~----~------~--~---
>> On Oct 19, 2007, at 10:31 AM, OnRails wrote: > >>> what is a different? @name and name on ruby? sometime I confuse >>> these.. > >> @name is an "instance variable" >> name is a local variable. > >> In a class, like the one below <snipped>, @birthdate is used in >> two places: in >> getBirthdate and in ageNow. In order to use it inside more than one >> method it needs to be an instance variable (a var with an @)....On Oct 19, 2007, at 5:33 PM, elle wrote:> Does that mean that @birthdate will be accessible to other classes > outside this one?In plain Ruby, no. To make it accessible to other classes, you''d have to use attr_reader birthdate # read only attribute birthdate # read and write (be careful) or write an explicit method like the getBirthday in the previous message''s example code. However, as tharrison wrote, Rails takes some liberties with this in some of its innards. If you write your own class though (i.e. not a Rails controller or model), then you''ll be following the rules of plain Ruby. -- gw --~--~---------~--~----~------------~-------~--~----~ 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-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org To unsubscribe from this group, send email to rubyonrails-talk-unsubscribe-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org For more options, visit this group at http://groups.google.com/group/rubyonrails-talk?hl=en -~----------~----~----~----~------~----~------~--~---
Thank you guys for explaining that. It''s been very helpful and by the way I have "Programming Ruby" on order. Just one more question: views can see the instance variable, is that right? and if so, how do they know which instance variable they can see? Elle On Oct 20, 1:56 pm, Greg Willits <li...-0Bv1hcaDFPRk211Z5VL+QA@public.gmane.org> wrote:> >> On Oct 19, 2007, at 10:31 AM, OnRails wrote: > > >>> what is a different? @name and name on ruby? sometime I confuse > >>> these.. > > >> @name is an "instance variable" > >> name is a local variable. > > >> In a class, like the one below <snipped>, @birthdate is used in > >> two places: in > >> getBirthdate and in ageNow. In order to use it inside more than one > >> method it needs to be an instance variable (a var with an @).... > > On Oct 19, 2007, at 5:33 PM, elle wrote: > > > Does that mean that @birthdate will be accessible to other classes > > outside this one? > > In plain Ruby, no. To make it accessible to other classes, you''d have > to use > > attr_reader birthdate # read only > attribute birthdate # read and write (be careful) > > or write an explicit method like the getBirthday in the previous > message''s example code. > > However, as tharrison wrote, Rails takes some liberties with this in > some of its innards. If you write your own class though (i.e. not a > Rails controller or model), then you''ll be following the rules of > plain Ruby. > > -- gw--~--~---------~--~----~------------~-------~--~----~ 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-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org To unsubscribe from this group, send email to rubyonrails-talk-unsubscribe-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org For more options, visit this group at http://groups.google.com/group/rubyonrails-talk?hl=en -~----------~----~----~----~------~----~------~--~---
On 20 Oct 2007, at 06:29, elle wrote:> > Thank you guys for explaining that. It''s been very helpful and by the > way I have "Programming Ruby" on order. > > Just one more question: views can see the instance variable, is that > right? and if so, how do they know which instance variable they can > see? >ActionController magically copies its instance variables into the object representing the views. There is a method on ActionController#Base defining those ivars not to copy accross. Fred> > Elle > > > On Oct 20, 1:56 pm, Greg Willits <li...-0Bv1hcaDFPRk211Z5VL+QA@public.gmane.org> wrote: >>>> On Oct 19, 2007, at 10:31 AM, OnRails wrote: >> >>>>> what is a different? @name and name on ruby? sometime I confuse >>>>> these.. >> >>>> @name is an "instance variable" >>>> name is a local variable. >> >>>> In a class, like the one below <snipped>, @birthdate is used in >>>> two places: in >>>> getBirthdate and in ageNow. In order to use it inside more than one >>>> method it needs to be an instance variable (a var with an @).... >> >> On Oct 19, 2007, at 5:33 PM, elle wrote: >> >>> Does that mean that @birthdate will be accessible to other classes >>> outside this one? >> >> In plain Ruby, no. To make it accessible to other classes, you''d have >> to use >> >> attr_reader birthdate # read only >> attribute birthdate # read and write (be careful) >> >> or write an explicit method like the getBirthday in the previous >> message''s example code. >> >> However, as tharrison wrote, Rails takes some liberties with this in >> some of its innards. If you write your own class though (i.e. not a >> Rails controller or model), then you''ll be following the rules of >> plain Ruby. >> >> -- gw > > > >--~--~---------~--~----~------------~-------~--~----~ 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-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org To unsubscribe from this group, send email to rubyonrails-talk-unsubscribe-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org For more options, visit this group at http://groups.google.com/group/rubyonrails-talk?hl=en -~----------~----~----~----~------~----~------~--~---