獲取類名稱(模塊,實際)的方法只是Module#name
。有沒有必要寫你自己:
Parent.name # => 'Parent'
Child.name # => 'Child'
然而,在Ruby中,真的沒有這樣的事情作爲一個「類名」,因爲在一些其他語言。在Ruby中,一個類只是一個像其他對象一樣的對象,像其他變量一樣被賦值給一個變量。
所有的Module#name
方法都是循環遍歷系統中的所有常量,並檢查模塊是否已分配給它們中的任何一個,並返回該常量的名稱或nil
(如果找不到)。
所以,就像其他任何對象一樣,一個類的「名稱」是真的是什麼都不是,只是用來引用它的任何變量。
實施例:
foo = Class.new
foo.name # => nil
現在,類的 「name」 是foo
。但是,Module#name
返回nil
,因爲foo
不是一個常數。現在
bar = foo
bar.name # => nil
,在類的 「名」 是既foo
和bar
,但Module#name
顯然還是返回nil
。
BAZ = foo
foo.name # => 'BAZ'
現在,由於該類已被分配到一個常量,該常量的名稱將被視爲該類的名字......
BAZ = nil
foo.name # => 'BAZ'
…即使在常量被分配到不同的東西之後,
QUX = foo
QUX.name # => 'BAZ'
…即使在班級被分配到不同的常數之後。
Module#to_s
使用Module#name
如果不是nil
,所以,打印類的名字,你根本就
puts Parent
有真的完全沒有必要在其他的答案中所有複雜的絨毛。
這似乎太容易了。謝謝。 – 2010-11-13 06:32:02
['Module#name']有什麼問題(http://Ruby-Doc.Org/ruby-1.9/classes/Module.html#M000913)以及double'puts'的原因? – 2010-11-13 09:57:27
沒有理由有一個返回self的方法,直接使用該對象:'放置父'。 Puts在後臺調用Parent.to_s來獲取類的字符串名稱。 – 2012-01-31 12:00:30