Array.instance_method(:shift)
#<UnboundMethod: Array#shift>
[].method(:shift).unbind
#<UnboundMethod: Array#shift>
Array.instance_method(:shift) === [].method(:shift).unbind
true
unbound_shift_operator = Array.instance_method(:<<)
p unbound_shift_operator.arity
p unbound_shift_operator.parameters
p unbound_shift_operator.owner
unbound_shift_operator.name
1 [[:req]] Array
:<<
unbind_shift = [].method(:shift).unbind
unbind_shift.bind([1, 2, 3])
unbind_shift.bind([1, 2, 3]).call
1
class SuperKlass
def super_method
self.class
end
end
class Klass < SuperKlass
end
class NotInheritKlass
def super_method
self.class
end
end
super_klass = SuperKlass.new
klass = Klass.new
not_inherit_klass = NotInheritKlass.new
unbind_super_method = SuperKlass.instance_method(:super_method)
p unbind_super_method.bind(super_klass).call
p unbind_super_method.bind(klass).call
unbind_super_method.bind(not_inherit_klass).call
SuperKlass Klass
TypeError: bind argument must be an instance of SuperKlass <main>:24:in `bind' <main>:24:in `<main>' /Users/ariga/.rbenv/versions/2.5.1/lib/ruby/gems/2.5.0/gems/iruby-0.3/lib/iruby/backend.rb:44:in `eval' /Users/ariga/.rbenv/versions/2.5.1/lib/ruby/gems/2.5.0/gems/iruby-0.3/lib/iruby/backend.rb:44:in `eval' /Users/ariga/.rbenv/versions/2.5.1/lib/ruby/gems/2.5.0/gems/iruby-0.3/lib/iruby/backend.rb:12:in `eval' /Users/ariga/.rbenv/versions/2.5.1/lib/ruby/gems/2.5.0/gems/iruby-0.3/lib/iruby/kernel.rb:87:in `execute_request' /Users/ariga/.rbenv/versions/2.5.1/lib/ruby/gems/2.5.0/gems/iruby-0.3/lib/iruby/kernel.rb:47:in `dispatch' /Users/ariga/.rbenv/versions/2.5.1/lib/ruby/gems/2.5.0/gems/iruby-0.3/lib/iruby/kernel.rb:37:in `run' /Users/ariga/.rbenv/versions/2.5.1/lib/ruby/gems/2.5.0/gems/iruby-0.3/lib/iruby/command.rb:70:in `run_kernel' /Users/ariga/.rbenv/versions/2.5.1/lib/ruby/gems/2.5.0/gems/iruby-0.3/lib/iruby/command.rb:34:in `run' /Users/ariga/.rbenv/versions/2.5.1/lib/ruby/gems/2.5.0/gems/iruby-0.3/bin/iruby:5:in `<top (required)>' /Users/ariga/.rbenv/versions/2.5.1/bin/iruby:23:in `load' /Users/ariga/.rbenv/versions/2.5.1/bin/iruby:23:in `<main>'
次回、「9-3 MethodオブジェクトとProc」から