Ruby 2.4.0 リファレンスマニュアル > ライブラリ一覧 > 組み込みライブラリ > UnboundMethodクラス

class UnboundMethod

クラス・モジュールの継承リスト: UnboundMethod < Object < Kernel < BasicObject

要約

レシーバを持たないメソッドを表すクラスです。呼び出すためにはレシーバにバインドする必要があります。

Module#instance_methodMethod#unbind により生成し、後で UnboundMethod#bind によりレシーバを割り当てた Method オブジェクトを作ることができます。

例: Method クラスの冒頭にある例を UnboundMethod で書くと以下のようになります。

class Foo
  def foo() "foo" end
  def bar() "bar" end
  def baz() "baz" end
end

# 任意のキーとメソッドの関係をハッシュに保持しておく
# レシーバの情報がここにはないことに注意
methods = {1 => Foo.instance_method(:foo),
           2 => Foo.instance_method(:bar),
           3 => Foo.instance_method(:baz)}

# キーを使って関連するメソッドを呼び出す
# レシーバは任意(Foo クラスのインスタンスでなければならない)
p methods[1].bind(Foo.new).call      # => "foo"
p methods[2].bind(Foo.new).call      # => "bar"
p methods[3].bind(Foo.new).call      # => "baz"
例: 以下はメソッドの再定義を UnboundMethod を使って行う方法です。普通は alias や super を使います。

class Foo
  def foo
    p :foo
  end
  @@orig_foo = instance_method :foo
  def foo
    p :bar
    @@orig_foo.bind(self).call
  end
end

Foo.new.foo

# => :bar
#    :foo

インスタンスメソッド

定義 説明
self == other -> bool
eql?(other) -> bool

自身と other が同じクラスあるいは同じモジュールの同じメソッドを表す場合に true を返します。そうでない場合に false を返します。

arity -> Integer

メソッドが受け付ける引数の数を返します。

bind(obj) -> Method

self を obj にバインドした Method オブジェクトを生成して返します。

clone -> UnboundMethod

自身を複製した UnboundMethod オブジェクトを作成して返します。

hash -> Integer

自身のハッシュ値を返します。

inspect -> String
to_s -> String

self を読みやすい文字列として返します。

name -> Symbol

このメソッドの名前を返します。

original_name -> Symbol

オリジナルのメソッド名を返します。

owner -> Class | Module

このメソッドが定義されている class か module を返します。

parameters -> [object]

UnboundMethod オブジェクトの引数の情報を返します。

source_location -> [String, Integer] | nil

ソースコードのファイル名と行番号を配列で返します。

super_method -> UnboundMethod | nil

self 内で super を実行した際に実行されるメソッドを UnboundMethod オブジェクトにして返します。

継承したメソッド

! != __id__ __send__ instance_eval instance_exec method_missing singleton_method_added singleton_method_removed singleton_method_undefined !~ <=> === =~ _dump class clone define_singleton_method display enum_for equal? extend freeze frozen? initialize initialize_copy instance_of? instance_variable_defined? instance_variable_get instance_variable_set instance_variables is_a? itself marshal_dump marshal_load method methods nil? object_id pretty_inspect pretty_print pretty_print_cycle pretty_print_inspect pretty_print_instance_variables private_methods protected_methods psych_to_yaml public_method public_methods public_send remove_instance_variable respond_to? respond_to_missing? send singleton_class singleton_method singleton_methods taint tainted? tap to_a to_ary to_hash to_int to_io to_proc to_regexp to_str trust untaint untrust untrusted? .new .yaml_tag ::ARGF ::ARGV ::DATA ::ENV ::FALSE ::NIL ::RUBY_COPYRIGHT ::RUBY_DESCRIPTION ::RUBY_ENGINE ::RUBY_ENGINE_VERSION ::RUBY_PATCHLEVEL ::RUBY_PLATFORM ::RUBY_RELEASE_DATE ::RUBY_REVISION ::RUBY_VERSION ::SCRIPT_LINES__ ::STDERR ::STDIN ::STDOUT ::TOPLEVEL_BINDING ::TRUE