Asp Forum
Home
|
Login
|
Register
|
Search
Forums
>
comp.lang.ruby
Getting a constant inside a class
Ben Johnson
9/19/2008 6:07:00 AM
How do you grab the value of a constant if it is inside a class << self?
example
class A
class << self
B = "HI"
end
end
A::B does not work. How would you go about grabbing the value for B?
Sorry for such a noob question. Thanks!
--
Posted via
http://www.ruby-...
.
1 Answer
Brian Candler
9/19/2008 10:15:00 AM
0
Ben Johnson wrote:
> How do you grab the value of a constant if it is inside a class << self?
>
> example
>
> class A
> class << self
> B = "HI"
> end
> end
>
> A::B does not work. How would you go about grabbing the value for B?
You've explicitly defined the constant inside the metaclass (singleton
class) of A.
I'd say it's better not to define the constant there in the first place,
but define it under A:
irb(main):001:0> class A
irb(main):002:1> B = "HI"
irb(main):003:1> class << self
irb(main):004:2> def test
irb(main):005:3> puts "I say #{B}"
irb(main):006:3> end
irb(main):007:2> end
irb(main):008:1> end
=> nil
irb(main):009:0> A.test
I say HI
=> nil
irb(main):010:0> A::B
=> "HI"
But if you *really* want to store a constant in a metaclass, it *is*
possible to get at it:
irb(main):001:0> class A
irb(main):002:1> class << self
irb(main):003:2> B = "HI"
irb(main):004:2> end
irb(main):005:1> end
=> "HI"
irb(main):006:0> A::B
NameError: uninitialized constant A::B
from (irb):6
from :0
irb(main):007:0> class Class
irb(main):008:1> def meta
irb(main):009:2> class <<self; self; end
irb(main):010:2> end
irb(main):011:1> end
=> nil
irb(main):012:0> A.meta::B
=> "HI"
I wrote a SingletonTutorial on the rubygarden.org wiki, but
unfortunately that site appears to have closed.
Regards,
Brian.
--
Posted via
http://www.ruby-...
.
Servizio di avviso nuovi messaggi
Ricevi direttamente nella tua mail i nuovi messaggi per
Getting a constant inside a class
Inserendo la tua e-mail nella casella sotto, riceverai un avviso tramite posta elettronica ogni volta che il motore di ricerca troverà un nuovo messaggio per te
Il servizio è completamente GRATUITO!
x
Login to ForumsZone
Login with Google
Login with E-Mail & Password