I was fooling around with class variables tonight, and I know this is
pretty silly, but forsome reason this code will work when in
its own class, as you can see in class A and class B, but when I
put the code together into class C I get an error
class_vars.rb:26: undefined method `up=' for C:Class (NoMethodError)
Can anyone explain why this is happening?
class A
@@foo=1
def self.foo=(n)
@@foo = n
end
end #prints "10"
puts "%s" % A.foo=10
class B
@@foo=1
def self.up
@@foo+=1
end
end #prints "2"
puts "%s" % B.up
class C
@@foo=1
def self.foo=(n)
@@foo = n
end
def self.up
@@foo+=1
end
end #should print "2, 10" but it doesn't work for me.
puts "%s, %s" % (C.up,C.foo=10)
I was fooling around with class variables tonight, and I know this is
pretty silly, but forsome reason this code will work when in
its own class, as you can see in class A and class B, but when I
put the code together into class C I get an error
class_vars.rb:26: undefined method `up=' for C:Class (NoMethodError)
Can anyone explain why this is happening?
[...]
puts "%s, %s" % (C.up,C.foo=10)
You need an array there: [C.up, C.foo=10]. The way you've got it,
what's happening is that it's being parsed as two assignments:
C.up = 10
C.foo = nil
David
···
On Thu, 26 Jan 2006, Alex Combas wrote:
--
David A. Black
dblack@wobblini.net
"Ruby for Rails", from Manning Publications, coming May 1, 2006!
> Can anyone explain why this is happening?
[...]
> puts "%s, %s" % (C.up,C.foo=10)
You need an array there: [C.up, C.foo=10]. The way you've got it,
what's happening is that it's being parsed as two assignments:
C.up = 10
C.foo = nil
Thanks I appreciate the quick reply, I think the () was a bit of
python showing its roots.
What I would like to do now is get instances of those classes and use the
methods that I've defined but I cant figure out how, without changing the class.
class A
@@foo=1
def self.foo=(n)
@@foo = n
end
end
puts "%s" % A.foo=10
a = A.new #this does not work for an instance #puts "%s" % a.foo=10
···
On 1/25/06, dblack@wobblini.net <dblack@wobblini.net> wrote:
On 1/25/06, dblack@wobblini.net <dblack@wobblini.net> wrote:
Can anyone explain why this is happening?
[...]
puts "%s, %s" % (C.up,C.foo=10)
You need an array there: [C.up, C.foo=10]. The way you've got it,
what's happening is that it's being parsed as two assignments:
C.up = 10
C.foo = nil
Thanks I appreciate the quick reply, I think the () was a bit of
python showing its roots.
What I would like to do now is get instances of those classes and use the
methods that I've defined but I cant figure out how, without changing the class.
class A
@@foo=1
def self.foo=(n)
@@foo = n
end
end
puts "%s" % A.foo=10
a = A.new #this does not work for an instance #puts "%s" % a.foo=10
Instances of A don't have a foo method, so you would indeed have to
change the class to give them one. Is there a reason you don't want
to in this particular case?
David
--
David A. Black
dblack@wobblini.net
"Ruby for Rails", from Manning Publications, coming May 1, 2006!
Instances of A don't have a foo method, so you would indeed have to
change the class to give them one. Is there a reason you don't want
to in this particular case?
Yes I see I can not have it both ways now, either a class.method or a
instance.method
but not both with the same declairation.
Thanks David