First Class Methods

Gives Ruby 1st class methods.

Easy access to method as objects, and they retain state!

  def hello
    puts "Hello World!"
  end

  m1 = method!(:hello)   #=> <Method: #hello>

  def m1.annotate
    "simple example"
  end

  m2 = method!(:hello)
  m2.annotate  #=> "simple example"

Easy access to method as objects, and they retain state!

  module K
    def hello
      puts "Hello World!"
    end
  end
  p K.instance_method!(:hello)   #=> <UnboundMethod: #hello>

CAUTION! This it is currently limited to the scope of the current module/class.

Notes

Should 1st Class Methods be part of Ruby proper?

Perhaps the best solution would be using the notation ::ameth. This would require some minor changes to Ruby, but with few backward incompatabilites if parantheticals revert back to the actual method invocation. Although this later stipulation means capitalized methods would not be accessible in this way b/c they would intefere with constant lookup. It‘s a trade off.

                  Current           Proposed           Alternate
                  ----------------- ------------------ -------------------
    Foo.Bar()     method call       method call        method call
    Foo.Bar       method call       method call        method call
    Foo.bar()     method call       method call        method call
    Foo.bar       method call       method call        method call
    Foo::Bar()    method call       method call        1st class method
    Foo::Bar      constant lookup   constant lookup    constant lookup
    Foo::bar()    method call       method call        1st class method
    Foo::bar      method call       1st class method   1st class method

Then again this dosen‘t address bound versus unbound.

Which do you prefer?

Authors

  • Thomas Sawyer

Copying

Copyright (c) 2005 Thomas Sawyer

Ruby License

This module is free software. You may use, modify, and/or redistribute this software under the same terms as Ruby.

This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.