Path: | lib/more/facets/1stclassmethod.rb |
Last Update: | Tue Oct 28 06:39:06 -0400 2008 |
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.
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?
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.