クラスの定義をいつでも変更できる。
class NilClass
def blank?
true
print "NilClass\n"
end
end
class String
def blank?
self.size == 0
print "String\n"
end
end
["", "person", nil].each do | element |
puts element unless element.blank?
end
実行結果
c:\code>ruby blank.rb
String
String
person
NilClass
まず最初の
""
が、Stringクラスなので、
Stringクラスに定義したblank?が呼ばれる。
そして、self.size==0がtrueとなるので、
unlessの左辺は実行されない。
(unlessはifの反対、falseのときに実行される。)
次に、"person"だが、
これもStringなので、Stringクラスのblank?が呼ばれる。
そして、self.size==0がfalseとなるので、
unlessの左辺が実行される。
その結果、personという文字列が表示されている。
最後に、nilだが、
これはNilClassなので、NilClassのblank?が呼ばれる。
そして、これが呼ばれた時には無条件でtrueを返す。
よって、unlessの左辺は実行されない。
よって、表示はNilClassと出力されるだけである。
オープンクラスは便利。
使えるようになっていきたい。
0 件のコメント:
コメントを投稿