[lnkForumImage]
TotalShareware - Download Free Software

Confronta i prezzi di migliaia di prodotti.
Asp Forum
 Home | Login | Register | Search 


 

Forums >

comp.lang.ruby

Re: How to use a class_variable into a Module

Heesob Park

5/19/2008 1:49:00 PM

Hi,

Iñaki Baz Castillo wrote:
> Hi, I want to declare a class_variable in class A.
> Class A includes a Module M and I want some methods in M using the
> class_variable but I get some problem:
>
> -------------------
> module M
> def kk
> #puts (eval %{ #{send('class').class_variables[0]} })
> puts @@class_var
> end
> end
>
> class A
> include M
> @@class_var = "kaka1"
> end
>
> a = A.new
> a.kk
> NameError: uninitialized class variable @@class_var in M
> from ./class_attr1.rb:4:in `kk'
> -------------------
>
>
> I understand the problem. Because the nature of class variables when
> the Module M uses @@ it looks into a class variable defined in same
> class/module.
>
> Is there any way I could use a class A @class_var into a included M
> module methods? If not then I'll use a normal attribute but I don't
> like it since it's a constant value that could perfectly be a class
> variable instead of initialiting it in each A instance creation.
>
Here is a working code:

module M
@@class_var = nil
def kk
puts @@class_var
end
end

class A
include M
@@class_var = "kaka1"
end

a = A.new
a.kk


Regards,

Park Heesob
--
Posted via http://www.ruby-....

2 Answers

Iñaki Baz Castillo

5/19/2008 3:11:00 PM

0

MjAwOC81LzE5LCBIZWVzb2IgUGFyayA8cGhhc2lzQGdtYWlsLmNvbT46Cgo+IEhlcmUgaXMgYSB3
b3JraW5nIGNvZGU6Cj4KPiAgbW9kdWxlIE0KPiAgICAgICBAQGNsYXNzX3ZhciA9IG5pbAo+ICAg
ICAgIGRlZiBrawo+Cj4gICAgICAgICAgICAgICBwdXRzIEBAY2xhc3NfdmFyCj4gICAgICAgZW5k
Cj4gIGVuZAo+Cj4gIGNsYXNzIEEKPiAgICAgICBpbmNsdWRlIE0KPiAgICAgICBAQGNsYXNzX3Zh
ciA9ICJrYWthMSIKPiAgZW5kCj4KPiAgYSA9IEEubmV3Cj4gIGEua2sKCgpJdCdzIGdyZWF0IQpU
aGFua3MgYSBsb3QuCgotLSAKScOxYWtpIEJheiBDYXN0aWxsbwo8aWJjQGFsaWF4Lm5ldD4K

Iñaki Baz Castillo

5/19/2008 3:17:00 PM

0

MjAwOC81LzE5LCBIZWVzb2IgUGFyayA8cGhhc2lzQGdtYWlsLmNvbT46Cj4gSGVyZSBpcyBhIHdv
cmtpbmcgY29kZToKPgo+ICBtb2R1bGUgTQo+ICAgICAgIEBAY2xhc3NfdmFyID0gbmlsCj4gICAg
ICAgZGVmIGtrCj4KPiAgICAgICAgICAgICAgIHB1dHMgQEBjbGFzc192YXIKPiAgICAgICBlbmQK
PiAgZW5kCj4KPiAgY2xhc3MgQQo+ICAgICAgIGluY2x1ZGUgTQo+ICAgICAgIEBAY2xhc3NfdmFy
ID0gImtha2ExIgo+ICBlbmQKCgpIaSwgc29ycnkgYnV0IHRoYXQgaXMgbm90IHZhbGlkIChhdCBs
ZWFzdCBpbiBteSBjYXNlKS4gSWYgeW91IGluY2x1ZGUKTSBtb2R1bGUgaW4gbW9yZSBjbGFzZXMs
IGVhY2ggb25lIHdpdGggaXRzIG93biBAQGNsYXNzX3ZhciwgdGhlbgpAQGNsYXNzX3ZhciB3aWxs
IGJlIHNoYXJlZCBiZXR3ZWVuIHRoZW0gdGhhdCBpdCdzIG5vdCB0aGUgZXhwZWN0ZWQKYmVoYXZp
b3VyOgoKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCm1vZHVsZSBNCglAQGNsYXNzX3Zh
ciA9IG5pbAoJCglkZWYga2sKCQlwdXRzIEBAY2xhc3NfdmFyCgllbmQKZW5kCgpjbGFzcyBBCglp
bmNsdWRlIE0KCUBAY2xhc3NfdmFyID0gIkBAIEEiCmVuZAoKY2xhc3MgQgoJaW5jbHVkZSBNCglA
QGNsYXNzX3ZhciA9ICJAQCBCIgplbmQKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCgph
PUEubmV3CmEua2sKPT4gQEAgQgooaXQncyBzaG91bGQgYmUgIkBAIEEiICkKCi0tIApJw7Fha2kg
QmF6IENhc3RpbGxvCjxpYmNAYWxpYXgubmV0Pgo=