Data for eigenclass

  • Thread starter Jari Williamsson
  • Start date
J

Jari Williamsson

How do I set data at the eigenclass level (data should basically be
connected to the class name)?

The @@my_data syntax seems to attach only to the original class in which
it was defined, not for any subclasses. And the @my_data syntax attach
to each instance.

I think I should be able to solve it "manually" with a hash, but I'm
looking for a built-in syntax for it?


Best regards,

Jari Williamsson
 
T

Thomas Wieczorek

The @@my_data syntax seems to attach only to the original class in which
it was defined, not for any subclasses. And the @my_data syntax attach
to each instance.

I am not sure if I understand you. Class variables(@@bar) are
available for its children:
(in irb)
class Foo
@@foo = "Yeehaaw!"
end
class Bar < Foo
def initialize
puts @@foo
end
end
=> "Yeehaaw!"
 
T

tho_mica_l

The @@my_data syntax seems to attach only to the original class in which
it was defined, not for any subclasses.

You can use attributes (@var) at the class level and manually copy
values with the Class#inherited method.

class A
class << self
attr_accessor :foo
def inherited(sub)
sub.foo = @foo
end
end
self.foo = 1
end

class B < A
end

p A.foo, B.foo
# => [1, 1]
B.foo = 2
p A.foo, B.foo
# => [1, 2]

If something like this is what you were asking for.

Or you could use some package that does this for you. IIRC traits
implements such a thing.

Thomas.
 
J

Jari Williamsson

tho_mica_l said:
The @@my_data syntax seems to attach only to the original class in which
it was defined, not for any subclasses.

You can use attributes (@var) at the class level and manually copy
values with the Class#inherited method.

class A
class << self
attr_accessor :foo
def inherited(sub)
sub.foo = @foo
end
end
self.foo = 1
end

class B < A
end

p A.foo, B.foo
# => [1, 1]
B.foo = 2
p A.foo, B.foo
# => [1, 2]

If something like this is what you were asking for.

Thanks! This was what I was looking for!
Or you could use some package that does this for you. IIRC traits
implements such a thing.

I'll look at it as well!


Best regards,

Jari Williamsson
 
R

Rados³aw Bu³at

PiA+IEkgYW0gbm90IHN1cmUgaWYgSSB1bmRlcnN0YW5kIHlvdS4gQ2xhc3MgdmFyaWFibGVzKEBA
YmFyKSBhcmUKPiA+IGF2YWlsYWJsZSBmb3IgaXRzIGNoaWxkcmVuOgo+IE5vIGxvbmdlciBpbiBS
dWJ5IDEuOQo+IGh0dHA6Ly9laWdlbmNsYXNzLm9yZy9oaWtpL0NoYW5nZXMraW4rUnVieSsxLjkj
bDM4CgpEaWQgeW91IHRyeT8gQWN0dWFsbHkgZWlnZW5jbGFzcyBpcyBub3QgdXAgdG8gZGF0ZS4g
TWF0eiBjaGFuZ2VkIGFuZApsYXRlciByb2xsZWQgYmFjayBtYW55IHRoaW5ncy4gSXQgd29ya3Mg
Zm9yIG1lLCBzbyBJIGd1ZXNzIGl0J3Mgb25lIG9mCnRoZXNlIHRoaW5ncy4KCiQgcnVieTEuOSAt
dgpydWJ5IDEuOS4wICgyMDA4LTAxLTE0IHJldmlzaW9uIDApIFtpNjg2LWxpbnV4XQokIHJ1Ynkx
LjkgLWUgImNsYXNzIEE7IEBAYSA9IDE7IGVuZDsgY2xhc3MgQiA8IEE7IEBAYSBlbmQiCgotLSAK
UmFkb3OzYXcgQnWzYXQKCmh0dHA6Ly9yYWRhcmVrLmpvZ2dlci5wbCAtIG3zaiBibG9nCg==
 
T

Thomas Wieczorek

MjAwOC8yLzYgUmFkb3OzYXcgQnWzYXQgPHJhZGVrLmJ1bGF0QGdtYWlsLmNvbT46Cj4KPiAgRGlk
IHlvdSB0cnk/IEFjdHVhbGx5IGVpZ2VuY2xhc3MgaXMgbm90IHVwIHRvIGRhdGUuIE1hdHogY2hh
bmdlZCBhbmQKPiAgbGF0ZXIgcm9sbGVkIGJhY2sgbWFueSB0aGluZ3MuIEl0IHdvcmtzIGZvciBt
ZSwgc28gSSBndWVzcyBpdCdzIG9uZSBvZgo+ICB0aGVzZSB0aGluZ3MuCj4KPiAgJCBydWJ5MS45
IC12Cj4gIHJ1YnkgMS45LjAgKDIwMDgtMDEtMTQgcmV2aXNpb24gMCkgW2k2ODYtbGludXhdCj4g
ICQgcnVieTEuOSAtZSAiY2xhc3MgQTsgQEBhID0gMTsgZW5kOyBjbGFzcyBCIDwgQTsgQEBhIGVu
ZCIKPgoKSXQgd29ya3MgaW4gMS44LjYgZm9yIG1lOgoKQzpcPnJ1YnkgLXYKcnVieSAxLjguNiAo
MjAwNy0wMy0xMyBwYXRjaGxldmVsIDApIFtpMzg2LW1zd2luMzJdCgpDOlw+cnVieSAtZSAiY2xh
c3MgQTsgQEBhPTE7IHB1dHMgQEBhOyBlbmQ7IGNsYXNzIEIgPCBBOyBwdXRzIEBAYSBlbmQiCjEK
MQo=
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Members online

Forum statistics

Threads
473,777
Messages
2,569,604
Members
45,233
Latest member
AlyssaCrai

Latest Threads

Top