Forum: Ruby Method.new - why not?

Announcement (2017-05-07): www.ruby-forum.com is now read-only since I unfortunately do not have the time to support and maintain the forum any more. Please see rubyonrails.org/community and ruby-lang.org/en/community for other Rails- und Ruby-related community platforms.
Aee77dba395ece0a04c688b05b07cd63?d=identicon&s=25 Daniel Berger (djberg96)
on 2009-02-04 07:23
(Received via mailing list)
Hi,

Just a random thought that I think was inspired by several people on
the list asking about getting the name of the method from within the
method - why don't we have Method.new? In other words, what if this:

def foo(x, y=1)
end

Was the equivalent of this?

x = Method.new(:name => 'foo', :parameters => ['x', 'y'], :defaults =>
{'y' => 1})
Object.include(x) # or bind(x) or something

Similar to an UnboundMethod I suppose, but with more options. Wouldn't
it be easier to get method metadata with this approach? And give
programmers the ability to associate any methods with any class or
module?

class Bar
   def foo(x, y=1)
      p method(:foo).metadata  # => @name => 'foo', @parameters =>
['x','y'], :defaults => {'y' => 1})
   end
end

Or is this totally stupid?

If this has been discussed before just point me to the thread.

Regards,

Dan
3131fcea0a711e5ad89c8d49cc9253b4?d=identicon&s=25 Julian Leviston (Guest)
on 2009-02-04 08:18
(Received via mailing list)
Isn't that how it already works?? :). Sorta. :). Try this:
File.method(:foreach)

Blog: http://random8.zenunit.com/
Learn rails: http://sensei.zenunit.com/
703fbc991fd63e0e1db54dca9ea31b53?d=identicon&s=25 Robert Dober (Guest)
on 2009-02-04 10:20
(Received via mailing list)
On Wed, Feb 4, 2009 at 7:20 AM, Daniel Berger <djberg96@gmail.com>
wrote:
>
>   def foo(x, y=1)
>
> Dan
>
>
Not stupid at all. I would even suggest that we do not bind methods to
object's class anymore.
Class is just a convenient? place for method err forget that word,
behavior lookup after all.

a = def a *args, &blk; whatever end
shall yield exactly the same as
a = lambda{ |*args,&blk| whatever }

But than a could implement the whole API above.
In other words, either Proc or Method has to die, one is redundant!

object.define_method a
object.extend a

Now the language implementors will probably just kill me, but that is
a risk I have to take ;).

R.
0ec4920185b657a03edf01fff96b4e9b?d=identicon&s=25 Yukihiro Matsumoto (Guest)
on 2009-02-04 16:29
(Received via mailing list)
Hi,

In message "Re: Method.new - why not?"
    on Wed, 4 Feb 2009 15:20:21 +0900, Daniel Berger
<djberg96@gmail.com> writes:

|Just a random thought that I think was inspired by several people on
|the list asking about getting the name of the method from within the
|method - why don't we have Method.new? In other words, what if this:
|
|def foo(x, y=1)
|end
|
|Was the equivalent of this?
|
|x = Method.new(:name => 'foo', :parameters => ['x', 'y'], :defaults =>
|{'y' => 1})
|Object.include(x) # or bind(x) or something

|Or is this totally stupid?

I don't think the idea itself is stupid at all, but I am afraid that
it doesn't go quite well with Ruby's Lisp-2 semantics.  That idea
would shine better in Lisp-1-ish languages like Scheme or Python.

              matz.
3131fcea0a711e5ad89c8d49cc9253b4?d=identicon&s=25 Julian Leviston (Guest)
on 2009-02-05 02:38
(Received via mailing list)
There's nothing to stop him writing a new class, say Message, that
exhibits this behaviour tho hey

Blog: http://random8.zenunit.com/
Learn rails: http://sensei.zenunit.com/

On 05/02/2009, at 2:29 AM, Yukihiro Matsumoto <matz@ruby-lang.org>
This topic is locked and can not be replied to.