schwarzの雑記 このページをアンテナに追加 RSSフィード

06/02/20 (Mon)2月20日の雑記

[] 18:17 2月20日の雑記 - schwarzの雑記 を含むブックマーク

「一番好きなメソッドは?」と聞かれたら、わたしは迷わず「p」と答えるでしょう。

なんといっても1文字。しかもわかりやすく出力してくれます。


この、オブジェクトをわかりやすく見せてくれるというのはinspectというメソッドがその役割を担っています。

array = [1, 2, 3 ,4, 5]
p array              #=> [1, 2, 3, 4, 5]
print array.inspect  #=> [1, 2, 3, 4, 5]

pというのは見えないところでinspectを呼び出してくれているわけです。



さてこのinspectですが、いつもわかりやすく見せてくれるわけではありません。

class Circle
  def initialize(x, y, r)
    @x = x  # x座標
    @y = y  # y座標
    @r = r  # 半径
  end
end

という円をあらわすクラスを定義したとします。そして、

circle = Circle.new(0, 0, 10)
p circle

としても、 

#<Circle:0x17b8da0 @y=0, @x=0, @r=10> 

のようなよくわからないものを返されてしまいます。


ところが、RGSSにあるColorクラスやRectクラスは、上記のCircleクラスと扱う情報は大差ないにもかかわらず、優れています。

rect = Rect.new(0, 0, 10, 20)
p rect     #=> (0, 0, 10, 20)

このように、内容をわかりやすく表示してくれます。


これは、ColorRectが内部でinspectを自分に合わせて再定義しているからです。Circleでもまねして再定義してみましょう。

class Circle
  def initialize(x, y, r)
    --- 中略 ---
  end
  def inspect
    return sprintf("(%d, %d, %d)", @x, @y, @r)
  end
end

これでpを呼び出せば、見事 (0, 0, 10) のような見やすい結果が返ってきます。

これで少しはデバッグが楽になるかもしれません。

[]本日のキーワード 18:33 本日のキーワード - schwarzの雑記 を含むブックマーク はてなブックマーク - 本日のキーワード - schwarzの雑記

p

[] 18:17 2月20日の雑記 - schwarzの雑記 を含むブックマーク

die Farbe (ファルベ)
das Rechteck (ヒトエック)
長方形
der Kreis (クイス)