全てのクラスのスーパークラス。 オブジェクトの一般的な振舞いを定義します。
self == other
self
と other が等しいかどうか判定します。
デフォルトでは equal?
と同じ効果です。
このメソッドは各クラスの性質に合わせて再定義するべきです。
self =~ other
古いタイプの正規表現比較 obj =~ /RE/
をサポートす
るためのメソッドです。デフォルトは
Object#== と同じ働きをします。
*1
self === other
このメソッドは case 文での比較に用いられます。デフォルトは Object#== と同じ働きをしますが、 この挙動はサブクラスで所属性のチェックを実現するため 適宜再定義されます。
become(obj) ((<ruby 1.7 feature>))
self
の内容を obj ですり替えます。obj は、
self
と同じクラスのインスタンスである必要があります。そうで
なければ例外 TypeError が発生します。
class Foo end p obj = Foo.new obj.instance_eval { @v = 1 } p obj.become(Foo.new) obj.instance_eval { p @v } => ruby 1.7.3 (2002-08-30) [i586-linux] #<Foo:0x401a8910> -:6: [BUG] Segmentation fault ruby 1.7.3 (2002-08-30) [i586-linux]
self
を返します。
class
type
レシーバのクラスを返します。
ruby 1.7 feature: type は、version 1.7 では、obsolete となりました。
clone
dup
オブジェクトの複製を作ります。
clone
は freeze
、taint
、特異メソッドなどの情報も
含めた完全な複製を、dup
はオブジェクトの内容のみの複製を
作ります。
clone
や dup
は「浅い(shallow)」コピーであることに注意
してください。オブジェクト自身を複製するだけで、オブジェクトの指し
ている先(たとえば配列の要素など)までは複製しません。
また複製したオブジェクトに対して
obj.equal?(obj.clone)
は一般に成立しませんが *2、
obj == obj.clone
は多くの場合に成立します。
true
, false
, nil
, Symbol オブジェクトなど
を複製しようとすると例外 TypeError が発生します。
ruby 1.7 feature: version 1.7 では、Numeric オブジェクトなど immutable(内容不 変)であるオブジェクトを複製しようとすると例外 TypeError が発 生します。
display([out=$defout])
オブジェクトを out に出力します。以下のように定義できます。
class Object def display(out=$defout) out.print to_s end end
eql?(other)
二つのオブジェクトが等しいかどうかを判定します。このメソッドは Hash でふたつのキーが等しいかどうかを判定するのに使われます。 このメソッドを再定義した時には Object#hash メソッ ドも再定義しなければなりません。
eql?
のデフォルトの定義は equal?
と同じくオブジェクト
の同一性判定になっています。
equal?(other)
other
が self
自身の時、真を返します。
このメソッドを再定義してはいけません。
extend(module ... )
引数で指定したモジュールで定義されているメソッドが self
の
特異メソッドとして追加されます。あるオブジェクトだけにモジュール
の機能を追加したいときに使用します。
module Foo def a 'ok' end end obj = Object.new obj.extend Foo p obj.a #=> "ok"
extend
の機能は、「特異クラスに対する include」
と言い替えることもできます。
ruby 1.7 feature: 引数に複数のモジュールを指定した場合、最後 の引数から逆順に extend を行います。
freeze
オブジェクトの内容の変更を禁止します。 フリーズされたオブジェクトの変更は例外 TypeError を発生させます。
frozen?
オブジェクトの内容の変更が禁止されているときに真を返します。
hash
オブジェクトのハッシュ値を返します。Hash クラスで
オブジェクトを格納するのに用いられています。A.eql?(B)
が
成立する時は必ず A.hash == B.hash
も成立しなければ
いけません。eql?
を再定義した時には必ずこちらも合わせて
再定義してください。
デフォルトでは、Object#id と同じ値をハッシュ値とし ます。ただし、Fixnum, Symbol, String だけは組込 みのハッシュ関数が使用されます(これを変えることはできません)。
hash を定義する場合は、一様に分布する任意の整数を返すようにします (現在の実装では、返り値の内部表現を 65439 (1.7 なら 536870917) *3 で割った余りをハッシュ値とします*4。
id
__id__
object_id ((<ruby 1.7 feature>))
各オブジェクトに対して一意な整数を返します。あるオブジェクトに対し てどのような整数が割り当てられるかは不定です。
id
メソッドの再定義に備えて別名 __id__
が用意されて
おり、ライブラリでは後者の利用が推奨されます。また __id__
を
再定義すべきではありません。
inspect
オブジェクトを人間が読める形式の文字列に変換します。
instance_eval(expr, [fname, [lineno=1]])
instance_eval {|obj| ... }
オブジェクトのコンテキストで文字列 expr を評価してその結果を返 します。 fname、lineno が与えられた場合は、ファイル fname、 行番号 lineno にその文字列があるかのようにコンパイルされ、ス タックトレース表示などのファイル名/行番号を差し替えることができま す。
ブロックが与えられた場合にはそのブロックをオブジェクトのコンテキス
トで評価してその結果を返します。ブロックの引数 obj には
self
が渡されます。
オブジェクトのコンテキストで評価するとは self
をそのオブジェ
クトにして実行するということです。また、文字列/ブロック中でメソッ
ドを定義すれば self
の特異メソッドが定義されます。
ただし、ローカル変数だけは instance_eval
の外側のスコープと
共有します。
注: メソッド定義の中で instance_eval のブロックを使用してメ ソッド定義を行うと、"nested method definition" とコンパイルエラー になります。これは、現在の ruby パーサの制限です。
def foo instance_eval { def bar # <- ネストしたメソッド定義と判断される "bar" end } end # => -:4: nested method definition
文字列で渡す形式を使えば、この制限は回避できます。
def foo instance_eval %Q{ def bar "bar" end } end # foo を実行すると関数(厳密には foo のレシーバのメソッド) bar # を定義する foo p bar # => "bar"
Module#module_eval, Module#class_eval も参照してください。
instance_of?(klass)
self
がクラス klass の直接のインスタンスである時、
真を返します。obj.instance_of?(c)
が成立する時には、常に
obj.kind_of?(c)
も成立します。
instance_variables
オブジェクトのインスタンス変数名を文字列の配列として返します。
local_variables, global_variables, Module.constants, Module#constants, Module#class_variables も参照してください。
is_a?(mod)
kind_of?(mod)
self
が、クラス mod とそのサブクラス、および
モジュール mod をインクルードしたクラスとそのサブクラス、
のいずれかのインスタンスであるとき真を返します。
module M end class C < Object include M end class S < C end obj = S.new p obj.is_a? S # true p obj.is_a? M # true p obj.is_a? C # true p obj.is_a? Object # true p obj.is_a? Hash # false
method(name)
self
のメソッド name をオブジェクト化した
Method オブジェクトを返します。name は
Symbol または文字列で指定します。
Module#instance_method も参照してください。
method_missing(name, args, ... )
呼びだされたメソッドが定義されていなかった時、Ruby がこのメソッド を呼び出します。呼び出しに失敗したメソッドの名前 (Symbol) とそ の時の引数が name と arg ... に渡されます。
デフォルトではこのメソッドは例外 NameError を発生させます。
methods
public_methods
そのオブジェクトが理解できるpublicメソッド名の一覧を配列とし て返します。
Module#instance_methods, Module#public_instance_methods, も参照してください。
nil?
レシーバが nil
かどうかをチェックします。
private_methods
そのオブジェクトが理解できるprivateメソッド名の 一覧を配列として返します。
Module#private_instance_methods, も参照してください。
protected_methods
そのオブジェクトが応答できる protected メソッド名の 一覧を文字列の配列で返します。
Module#protected_instance_methods, も参照してください。
respond_to?(name[, priv=false])
オブジェクトが public メソッド name を持つとき真。 nameは Symbol または文字列です。priv が 真のときは private メソッドに対しても真を返します。
send(name[, args ... ])
send(name[, args ... ]) { .... }
__send__(name[, args ... ])
__send__(name[, args ... ]) { ... }
オブジェクトのメソッド name を、引数に args を 渡して呼び出します。ブロック付きで呼ばれたときはブロックも そのまま引き渡します。メソッド名 name は文字列か Symbol です。
send
が再定義された場合に備えて別名 __send__
も
用意されており、ライブラリではこちらを使うべきです。また
__send__
は再定義すべきではありません。
send
, __send__
は、呼び出し制限
にかかわらず任意のメソッドを呼び出せます。
singleton_methods([all=false])
そのオブジェクトに対して定義されている特異メソッド名の一覧を 配列として返します。
ruby 1.7 feature: 省略可能な引数 all に真を指定すれば 特異クラスがインクルードしているモジュールのメソッドも対象になります。
obj = Object.new module Foo def foo end end class <<obj include Foo def bar end end p obj.singleton_methods #=> ["bar"] p obj.singleton_methods true #=> ["bar", "foo"]
あるいは、Object#extend は特異クラスに対するイ ンクルードなので以下も同様になります。
obj = Object.new module Foo def foo end end obj.extend(Foo) p obj.singleton_methods #=> [] p obj.singleton_methods true #=> ["foo"]
taint
オブジェクトの「汚染マーク」をセットします。
オブジェクトの汚染に関してはセキュリティモデルを参照してください。
tainted?
オブジェクトの「汚染マーク」がセットされている時真を返します。
オブジェクトの汚染に関してはセキュリティモデルを参照してください。
to_a
オブジェクトを配列に変換します。普通に配列に変換できない オブジェクトは、自身のみを含む長さ 1 の配列に変換されます (ruby 1.7 feature: この挙動は将来なくなるかもしれません。1.7 では警告が出ます)。
例
p( {'a'=>1}.to_a ) # [["a", 1]] p ['array'].to_a # ["array"] p 1.to_a # [1] p 'str'.to_a # ["str"]
to_ary
オブジェクトの配列への暗黙の変換が必要なときに内部で呼ばれます。 *5
このメソッドが定義されたオブジェクトが単独で多重代入の右辺に 現れた場合にも呼ばれます。
class Foo def to_ary [1, 2, 3] end end a, b, c = Foo.new p [a, b, c] => [1, 2, 3]
to_hash
オブジェクトのハッシュへの暗黙の変換が必要なときに内部で呼ばれます。
to_int
オブジェクトの整数への暗黙の変換が必要なときに内部で呼ばれます。
to_s
オブジェクトの文字列表現を返します。
print や sprintf は文字列以外の オブジェクトが引数に渡された場合このメソッドを使って文字列に変換し ます。
to_str
オブジェクトの文字列への暗黙の変換が必要なときに呼ばれます。
untaint
オブジェクトの「汚染マーク」を取り除きます。汚染マークを取り 除くことによる危険性はプログラマが責任を負う必要があります。
セキュリティレベルが3以上の場合は例外 SecurityError を 発生します。
オブジェクトの汚染に関してはセキュリティモデルを参照してください。
initialize
ユーザ定義クラスのオブジェクト初期化メソッド。このメソッドは
Class#new から新しく生成されたオブジェクトの初期化
のために呼び出されます。デフォルトの動作ではなにもしません。サブク
ラスではこのメソッドを必要に応じて再定義されることが期待されていま
す。initialize
には Class#new に与えられた引
数がそのまま渡されます。
また initialize
という名前を持つメソッドは自動的に private に
設定されます。
remove_instance_variable(name)
オブジェクトからインスタンス変数 name を取り除き、そのインス タンス変数に設定されていた値を返します。name は Symbol か文字列です。
オブジェクトがインスタンス変数 name を持たない場合は例外 NameError が発生します。
class Foo def foo @foo = 1 p remove_instance_variable :@foo # => 1 p remove_instance_variable :@foo # => instance variable @foo not defined (NameError) end end Foo.new.foo
Module#remove_class_variable, Module#remove_const も参照してください。
singleton_method_added(name)
特異メソッドが追加された時にインタプリタから呼び出されます。 name には追加されたメソッド名が Symbol で渡されます。
class Foo def singleton_method_added(name) puts "singleton method \"#{name}\" was added" end end obj = Foo.new def obj.foo end => singleton method "foo" was added
通常のメソッドの追加に対するフックには Module#method_addedを使います。
singleton_method_removed(name)
特異メソッドが Module#remove_method に より削除された時にインタプリタから呼び出されます。 name には削除されたメソッド名が Symbol で渡されます。
class Foo def singleton_method_removed(name) puts "singleton method \"#{name}\" was removed" end end obj = Foo.new def obj.foo end class << obj remove_method :foo end => singleton method "foo" was removed
通常のメソッドの削除に対するフックには Module#method_removedを使います。
singleton_method_undefined(name)
特異メソッドが Module#undef_method または undef により未定義にされた時にインタプリタ から呼び出されます。 name には未定義にされたメソッド名が Symbol で渡されます。
class Foo def singleton_method_undefined(name) puts "singleton method \"#{name}\" was undefined" end end obj = Foo.new def obj.foo end def obj.bar end class << obj undef_method :foo end obj.instance_eval {undef bar} => singleton method "foo" was undefined singleton method "bar" was undefined
通常のメソッドの未定義に対するフックには Module#method_undefined を使います。
*1あらい 2002-01-13: 本当は違う ruby-bugs-ja:PR#178[外部]
*2version 1.6 では、0.equal?(0.clone) が成立してしまいます
*3あらい 2002-01-13: 素数じゃなくていいのかな?
*4あらい 2002-01-13: 本当はこれを
更に内部のテーブルサイズで割った余りが使用されます。
あらい 2002-02-24: これは素数になりましたrubyist:1020[外部]
*5to_ary, to_hash, to_int, to_str は、説明の便宜上このページに書
いてますが、デフォルトでは Object
のメソッドとしては定義され
ていません