Forum: Ruby Re: Scope of an @variable

Announcement (2017-05-07): www.ruby-forum.com is now read-only since I unfortunately do not have the time to support and maintain the forum any more. Please see rubyonrails.org/community and ruby-lang.org/en/community for other Rails- und Ruby-related community platforms.
Dbfe42fc2f2b9e82578936523b19cd3c?d=identicon&s=25 William (Bill) Froelich (Guest)
on 2006-03-14 23:42
(Received via mailing list)
I'm also a newbie so others feel free to correct me as well ;-)

Your understanding is correct in that @name applies to the specific
instance of the class and the @@name applies to all instances of the
class.

Hope this example helps.



class Person
	@@lastname = "Doe"
	@name=""

	def setLastName(newName)
		@@lastname =  newName
	end

	def changeName(newName)
		@name = newName
	end

	def sayName()
		"My name is " + @name
	end

	def fullName()
		"My full name is " + @name + " " + @@lastname
	end
end

puts "---Defining John---\n"
p1 = Person.new()
p1.changeName('John')
puts p1.sayName()
puts p1.fullName()

puts "\n"

puts "---Defining Jane---\n"
p2 = Person.new()
p2.changeName('Jane')
puts p2.sayName()
puts p2.fullName()

puts "\n"

puts "---Changing Last Name---\n"
p1.setLastName('Smith')

puts "John's full name -> " + p1.fullName()
puts "Jane's full name -> " + p2.fullName()
02bd6b98b7c04f9ae5868eda3d01fb73?d=identicon&s=25 rtilley (Guest)
on 2006-03-15 01:16
(Received via mailing list)
William (Bill) Froelich wrote:
> I'm also a newbie so others feel free to correct me as well ;-)
>
> Your understanding is correct in that @name applies to the specific
> instance of the class and the @@name applies to all instances of the
> class.

This may be wrong, but I like to think of @@ as a class variable and @
as a method variable. @@ is accessible by any method in the class and @
is accessible by the method only.
8217faf2bfdfa7daf10135d41ddd421e?d=identicon&s=25 Jeff Cohen (jeff)
on 2006-03-15 01:54
rtilley wrote:
> This may be wrong, but I like to think of @@ as a class variable and @
> as a method variable. @@ is accessible by any method in the class and @
> is accessible by the method only.

You're close. @ are instance variables.  Any instance method in your
class can
access them.

(Maybe you're thinking of local variables, which are defined within a
method and are accessible by that method only.)

Jeff
www.softiesonrails.com
www.jeffcohenonline.com
02bd6b98b7c04f9ae5868eda3d01fb73?d=identicon&s=25 rtilley (Guest)
on 2006-03-15 02:06
(Received via mailing list)
Jeff Cohen wrote:
> method and are accessible by that method only.)
Thanks Jeff! That makes sense. I was confusing @ vars with local vars.
Ffcb418e17cac2873d611c2b8d8d891c?d=identicon&s=25 Benjohn Barnes (Guest)
on 2006-03-17 01:07
(Received via mailing list)
On 15 Mar 2006, at 00:54, Jeff Cohen wrote:

> rtilley wrote:
>> This may be wrong, but I like to think of @@ as a class variable
>> and @
>> as a method variable. @@ is accessible by any method in the class
>> and @
>> is accessible by the method only.
>
> You're close. @ are instance variables.  Any instance method in your
> class can
> access them.

You can also access @ variables from a class method - ie
ClassName.function; @a_variable; end. They are local to each class
within a hierarchy, rather than @@ which would be shared among
classes in the hierarchy.

So:

class X
	def X.var;
		@var
	end

	def X.var=(v)
		@var=v
	end
end

class Y<X;end

X.var=10
Y.var=20
X.var	=> 10
Y.var	=> 20

Cheers,
	Benjohn
1fba4539b6cafe2e60a2916fa184fc2f?d=identicon&s=25 unknown (Guest)
on 2006-03-17 02:13
(Received via mailing list)
Hi --

On Fri, 17 Mar 2006, Benjohn Barnes wrote:

>> access them.
> 	end
> X.var	=> 10
> Y.var	=> 20

Nice, isn't it?  It's really just this:

   obj = Object.new
   def obj.var
     @var
   end

   def obj.var=(v)
     @var = v
   end

with obj being a Class object.  Plus the special-cased thing where the
subclasses get to call it (because the singleton class of X is
considered the superclass of the singleton class of Y).

You can also do:

   class X
     class << self      # singleton class of X
       attr_accessor :var
     end
   end


David

--
David A. Black (dblack@wobblini.net)
Ruby Power and Light, LLC (http://www.rubypowerandlight.com)

"Ruby for Rails" chapters now available
from Manning Early Access Program! http://www.manning.com/books/black
This topic is locked and can not be replied to.