puts "---Changing Last Name---\n"
p1.setLastName('Smith')
puts "John's full name -> " + p1.fullName()
puts "Jane's full name -> " + p2.fullName()
路路路
-----Original Message-----
From: list-bounce@example.com [mailto:list-bounce@example.com] On Behalf
Of Nathan Olberding
Sent: Tuesday, March 14, 2006 4:18 PM
To: ruby-talk ML
Subject: Re: Scope of an @variable
Adam Shelly wrote:
you need to use @@name.
I was under the impression (newbie alert) that @name was for instances
and @@name was for classes as a whole (ie, @@ variables change that
value in all instances of Class). Is there a way to have variables that
apply to all instances of a Class?
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.
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.)
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.)
Thanks Jeff! That makes sense. I was confusing @ vars with local vars.
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
路路路
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.
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
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