How do methods get called?

@hubertlepicki

 

BRUG

2015-02-17 18:00

What is a method?

Everything's an object

Some syntax

class A
  def foo()

     end

end

 

a = A.new

a.foo()

a.call(:foo)

 

Methods are objects

a = class A
  def foo(); puts "foo"; end

end.new

 

method = a.method(:foo)

=> #<Method: A#foo>

method.call(:foo)

foo

=> nil

Inheritance

class B < A
end

b = B.new

method = b.method(:foo)

=> #<Method: B(A)#foo>

 

NoMethodError

a.i_do_not_exist

NoMethodError: undefined method `i_do_not_exist' for #<A:0x00000000df4d00>

method_missing

class A
  def method_missing(n, *a, &b)
    puts "Called me: #{n}"
  end
end

a.sdfsdfsdf
Called me: sdfsdfsdf

b.sdfsdf

Called me: sdfsdf

a.method(:sdfsdf)
NameError: undefined method `sdfsdf' 

Methods lookup

 

B.ancestors
 => [B, A, Object, Kernel, BasicObject

 

 

Mixing in modules

module Z; def foo; end; end
module Y; def foo; end; end

class B < A

  include Y

  include Z

end

B.new.method(:foo)

=> #<Method: B(Z)>

B.ancestors

 => [B, Z, Y, A, Object, Kernel, BasicObject]

Singleton class

b = B.new

 

def b.foo

end

 

b.method(:foo)
 => #<Method: #<B:0x0000000193d658>.foo>

b.singleton_class.ancestors

B.ancestors
 => [B, Z, Y, A, Object, Kernel, BasicObject]

super

module Y; def foo; puts "foo"; end

module Z; def foo; super; end

 

b.foo

"foo"

Thanks!

Made with Slides.com