4
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

Rubyでブランクスレート

Last updated at Posted at 2013-05-17

はじめに

ブランクスレート:空白の石版
メソッドがほとんどない空っぽなクラスの事・・・でいいのかな?
必要なメソッドだけにしたい場合とかに使う。

Ruby 1.8.7の頃

必要っぽいメソッド以外をundef_methodで未定義にするという事をしていました。

class BlankSlate
  instance_methods.each{|method|
    undef_method method unless method.to_s =~ /method_missing|respond_to?|^__|object_id/
  }
end

Ruby1.9以降

BasicObjectで一発なんですね!

class BlankSlate < BasicObject ; end

BasicObjectとは?

Ruby 1.9.3 リファレンスマニュアル

要約

特殊な用途のために意図的にほとんど何も定義されていないクラスです。
Objectクラスの親にあたります。Ruby 1.9 以降で導入されました。

性質

BasicObject クラスは Object クラスからほとんどのメソッドを取り除いたクラスです。
Object クラスは様々な便利なメソッドや Kernel から受け継いだ関数的メソッド を多数有しています。
これに対して、 BasicObject クラスはオブジェクトの同一性を識別したりメソッドを呼んだりする 最低限の機能の他は一切の機能を持っていません。

注意

通常のクラスは Object またはその他の適切なクラスから派生すべきです。
真に必要な場合にだけ BasicObject から派生してください。

『真に必要な場合にだけ』
・・・(^q^

実行結果

どちらでもundefined method
(rvmが入ってたり入っていなかったりしますけど(=w=;)

>> BlankSlate.new.methods
NoMethodError: undefined method `methods' for #<BlankSlate:0x106e93228>
	from (irb):6
1.9.3p392 :001 > class BlankSlate < BasicObject ; end
 => nil 
1.9.3p392 :002 > BlankSlate.new.methods
NoMethodError: undefined method `methods' for #<BlankSlate:0x000000020ec868>
	from (irb):2
	from /home/*****/.rvm/rubies/ruby-1.9.3-p392/bin/irb:16:in `<main>'

両方のバージョンで使うなら?

こんな感じ?
むしろ、もう1.8系とか忘れていいとは思いますが。
使うなら2系ですもんね。

if RUBY_VERSION < "1.9"
  class BlankSlate
    instance_methods.each{|method|
      undef_method method unless method.to_s =~ /method_missing|respond_to?|^__|object_id/
    }
  end
else
  class BlankSlate < BasicObject ; end
end

module MyMethods
  def hello
    puts "hello"
  end
end

class Execute < BlankSlate 
  extend MyMethods
end

Execute.hello

実行結果

hello

Objectを汚したくない場面とかに使ったりするかな〜(=w=

4
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?