Forum: Ruby class variable weirdness

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.
622fa8560c82dfaa59c91ec75efb0c19?d=identicon&s=25 Alex Combas (Guest)
on 2006-01-26 04:07
(Received via mailing list)
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)
1fba4539b6cafe2e60a2916fa184fc2f?d=identicon&s=25 unknown (Guest)
on 2006-01-26 04:19
(Received via mailing list)
Hi --

On Thu, 26 Jan 2006, Alex Combas wrote:

> 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

--
David A. Black
dblack@wobblini.net

"Ruby for Rails", from Manning Publications, coming May 1, 2006!
http://www.manning.com/books/black
622fa8560c82dfaa59c91ec75efb0c19?d=identicon&s=25 Alex Combas (Guest)
on 2006-01-26 05:22
(Received via mailing list)
hi David

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
1fba4539b6cafe2e60a2916fa184fc2f?d=identicon&s=25 unknown (Guest)
on 2006-01-26 05:35
(Received via mailing list)
Hi--

On Thu, 26 Jan 2006, Alex Combas wrote:

>>    C.up = 10
>  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!
http://www.manning.com/books/black
622fa8560c82dfaa59c91ec75efb0c19?d=identicon&s=25 Alex Combas (Guest)
on 2006-01-26 06:08
(Received via mailing list)
> 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
This topic is locked and can not be replied to.