dポイントプレゼントキャンペーン実施中!

クラスインスタンス内から自分のクラス名を取得しようと思うと、self.class.nameで取得できますが、type.nameでも取得できます。
しかし、typeは非推奨メソッドとなっているため、警告が出て、このままでは使用することができません。

素直にself.classを使えばいいのかもしれませんが、selfのワンクッションがどうにも気に入りません。

スマートな記述方法あったら教えて下さい。

# self.class.nameを使用する場合
class MyClass
 def print_classname
  puts self.class.name
  # puts class.name これはエラー
 end
end

# type.nameを使用する場合
class MyClass2
 def print_classname
  puts type.name # これはdeprecatedの記述で警告が出る
 end
end

A 回答 (1件)

self を書きたくないということなら、


alias :xclass :class
しておいて、
xclass.name
するくらいしかないと思います。スマートとは思いませんけど。

逆に、インスタンスメソッド定義の中で、class以外のメソッド呼び出しの時もselfを省略しないで書くことにすれば、全部統一が取れます。

この回答への補足

補足・・(うまく伝わっていないかもしれないので念のため)

考慮から外れていたというのは、思いつきませんでした、ということです。
つまりありがたいお答えですありがとうございますということです。

補足日時:2009/12/20 20:01
    • good
    • 0
この回答へのお礼

ありがとうございます。
aliasは考慮から外れていました。

self.を書きたくないのではなくて、type書くとself.が必要ないのに、classで書く時はself.が必要というのが無駄だなと思ったからです。

お礼日時:2009/12/20 08:09

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!