[lnkForumImage]
TotalShareware - Download Free Software

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


 

Forums >

comp.lang.ruby

how to find self class name inside self difinition ?

Thani Ararsu

11/10/2008 5:33:00 AM

module Aa
end

class Aa::Name
def self.class_name
self.class.name
end
end
puts Aa::Name.class_name # 'Class'

# But i want my class name as 'Aa::Name' instead of 'Class'


any idea ?
--
Posted via http://www.ruby-....

5 Answers

Stefan Rusterholz

11/10/2008 6:30:00 AM

0

Thani Ararsu wrote:
> module Aa
> end
>
> class Aa::Name
> def self.class_name
> self.class.name
> end
> end
> puts Aa::Name.class_name # 'Class'
>
> # But i want my class name as 'Aa::Name' instead of 'Class'
>
>
> any idea ?

Just drop the .class part.
class Aa::Name
def self.class_name; self.name; end # self is redundant so:
def self.class_name; name; end # now for this we got a nice little
construct that goes:
class << self
alias class_name name
end
end

Regards
Stefan
--
Posted via http://www.ruby-....

Thani Ararsu

11/10/2008 9:26:00 AM

0

Thanks
--
Posted via http://www.ruby-....

xue19840909

11/10/2008 10:10:00 AM

0

module Aa
end

class Aa::Name
def class_name
self.class.name
end
end
puts Aa::Name.new().class_name

Stephen Pearson

11/10/2008 11:18:00 AM

0

Thani Ararsu wrote:
> module Aa
> end
>
> class Aa::Name
> def self.class_name
> self.class.name
> end
> end
> puts Aa::Name.class_name # 'Class'
>
> # But i want my class name as 'Aa::Name' instead of 'Class'
>
>
> any idea ?

module Aa
end

class Aa::Name
def self.class_name
name
end
end
puts Aa::Name.class_name

Or dispense with the class method entirely:

puts Aa::Name.name

Robert Klemme

11/10/2008 1:47:00 PM

0

2008/11/10 Stephen Pearson <steve.6qa8e@mailnull.com>:

> module Aa
> end
>
> class Aa::Name
> def self.class_name
> name
> end
> end
> puts Aa::Name.class_name
>
> Or dispense with the class method entirely:

That would be my advice as well. Note also that Module#to_s is an
alias for Module#name so you can even print the class object directly
(if it is for output purposes).

> puts Aa::Name.name

Ruby version 1.8.7
irb(main):001:0> module Aa
irb(main):002:1> class Name
irb(main):003:2> puts name, self.name, self
irb(main):004:2> end
irb(main):005:1> end
Aa::Name
Aa::Name
Aa::Name
=> nil
irb(main):006:0>


Kind regards

robert


--
remember.guy do |as, often| as.you_can - without end