[#20675] RCR: non-bang equivalent to []= — Tobias Reif <tobiasreif@...>

Hi,

49 messages 2001/09/01
[#20774] Re: RCR: non-bang equivalent to []= — Tobias Reif <tobiasreif@...> 2001/09/03

I wrote:

[#20778] Re: RCR: non-bang equivalent to []= — Kevin Smith <kevinbsmith@...> 2001/09/03

--- Tobias Reif <tobiasreif@pinkjuice.com> wrote:

[#20715] oreilly buch von matz - website online — markus jais <info@...>

hi

43 messages 2001/09/02
[#20717] Re: OReilly Ruby book has snail on cover — ptkwt@...1.aracnet.com (Phil Tomson) 2001/09/02

Actually, thanks for posting it here. I was trying to search OReilly's

[#20922] Re: OReilly Ruby book has snail on cover — Paul Brannan <pbrannan@...> 2001/09/05

On Mon, 3 Sep 2001, Phil Tomson wrote:

[#20768] Minor cgi.rb question — "Hal E. Fulton" <hal9000@...>

I don't have much experience with

25 messages 2001/09/03

[#20770] Calling member methods from C++ — jglueck@... (Bernhard Glk)

Some quetsions have been solved for me, but my message system does not

12 messages 2001/09/03

[#20976] destructor — Frank Sonnemans <ruby@...>

Does Ruby have a destructor as in C++?

25 messages 2001/09/07

[#21218] Ruby objects <-> XML: anyone working on this? — senderista@... (Tobin Baker)

Are there any Ruby analogs of these two Python modules (xml_pickle,

13 messages 2001/09/15

[#21296] nested require files need path internally — Bob Gustafson <bobgus@...>

Version: 1.64

29 messages 2001/09/18
[#21298] Re: nested require files need path internally — David Alan Black <dblack@...> 2001/09/18

Hello --

[#21302] Re: nested require files need path internally — Bob Gustafson <bobgus@...> 2001/09/18

On Tue, 18 Sep 2001, David Alan Black wrote:

[#21303] Re: nested require files need path internally — matz@... (Yukihiro Matsumoto) 2001/09/18

Hi,

[#21306] Re: nested require files need path internally — Lars Christensen <larsch@...> 2001/09/18

On Tue, 18 Sep 2001, Yukihiro Matsumoto wrote:

[#21307] Re: nested require files need path internally — matz@... (Yukihiro Matsumoto) 2001/09/18

Hi,

[#21331] Re: nested require files need path internally — Paul Brannan <pbrannan@...> 2001/09/18

> The big difference is C++ search done in compile time, Ruby search

[#21340] Re: nested require files need path internally — matz@... (Yukihiro Matsumoto) 2001/09/18

Hi,

[#21353] Re: nested require files need path internally — Paul Brannan <pbrannan@...> 2001/09/18

On Wed, 19 Sep 2001, Yukihiro Matsumoto wrote:

[#21366] Re: nested require files need path internally — matz@... (Yukihiro Matsumoto) 2001/09/19

Hi,

[#21368] Re: nested require files need path internally — "Julian Fitzell" <julian-ml@...4.com> 2001/09/19

On 19/09/2001 at 10:12 AM matz@ruby-lang.org wrote:

[#21376] Re: nested require files need path internally — matz@... (Yukihiro Matsumoto) 2001/09/19

Hi,

[#21406] Re: nested require files need path internally — Paul Brannan <pbrannan@...> 2001/09/19

On Wed, 19 Sep 2001, Yukihiro Matsumoto wrote:

[#21315] Suggestions for new CGI lib — anders@... (Anders Johannsen)

From the comp.lang.ruby thread "Minor cgi.rb question" (2001-09-03), I

21 messages 2001/09/18

[#21413] Ruby/objects book in style of The Little Lisper — Brian Marick <marick@...>

I fell in love with Lisp in the early 80's. Back then, I read a book called

36 messages 2001/09/19
[#21420] Re: Ruby/objects book in style of The Little Lisper — Christopher Sawtell <csawtell@...> 2001/09/20

On 20 Sep 2001 06:19:44 +0900, Brian Marick wrote:

[#21479] Re: Ruby/objects book in style of The Little Lisper — Kevin Smith <kevinbsmith@...> 2001/09/21

--- Christopher Sawtell <csawtell@paradise.net.nz> wrote:

[#21491] SV: Re: Ruby/objects book in style of The Little Lisper — "Mikkel Damsgaard" <mikkel_damsgaard@...> 2001/09/21

[#21494] Re: SV: Re: Ruby/objects book in style of The Little Lisper — Kevin Smith <kevinbsmith@...> 2001/09/21

--- Mikkel Damsgaard <mikkel_damsgaard@mailme.dk> wrote:

[#21510] Re: SV: Re: Ruby/objects book in style of The Little Lisper — Todd Gillespie <toddg@...> 2001/09/22

On Sat, 22 Sep 2001, Kevin Smith wrote:

[#21514] Re: SV: Re: Ruby/objects book in style of The Little Lisper — Kevin Smith <kevinbsmith@...> 2001/09/22

--- Todd Gillespie <toddg@mail.ma.utexas.edu> wrote:

[#21535] irb — Fabio <fabio.spelta@...>

Hello. :) I'm new here, and I have not found an archive of the previous

15 messages 2001/09/22

[#21616] opening a named pipe? — "Avdi B. Grimm" <avdi@...>

I'm having trouble reading from a named pipe in linux. basicly, I'm

12 messages 2001/09/24

[#21685] manipulating "immutable" objects such as Fixnum from within callbacks & al... — Guillaume Cottenceau <gc@...>

Hello,

15 messages 2001/09/25

[#21798] Ruby internal (guide to the source) — "Benoit Cerrina" <benoit.cerrina@...>

Hi,

22 messages 2001/09/28

[ruby-talk:20813] Re: Proc internals

From: "Brian F. Feldman" <green@...>
Date: 2001-09-03 21:04:54 UTC
List: ruby-talk #20813
"Christian Rishoej" <chrris@mail.dk> wrote:
> In article <200109031946.f83Jk9352280@green.bikeshed.org>, "Brian F.
> Feldman" <green@freebsd.org> wrote:
> 
> > They're not exactly interchangeable...  There may be an answer depending
> > on what exactly it is that you want to do.
> 
> The post from Henning von Rosen (`how update anonymous classes?'') gave
> me an excuse for investigating the internals of Ruby.
> 
> I imagined a new instance method on Class:
> 
> 	Class#add_method( methodName, &methodProc )
> 
> ....which would add the supplied Proc/Block and add it as a method to the
> particular instance of class. So far I have:
> 
> ######################################
> 
> #include "ruby.h"
> 
> VALUE
> rb_class_add_method(VALUE obj, VALUE methodName, VALUE methodProc)
> {
>     int argc;
>     ID id;
> 
>     Check_Type(methodName, T_STRING);
> 
>     if (!rb_obj_is_kind_of(methodProc, rb_cProc))
> 	rb_raise(rb_eArgError, "Must pass a Proc");
>     
>     argc = FIX2INT(rb_funcall(methodProc, rb_intern("arity"), 0));
>     
>     id = rb_intern(STR2CSTR(methodName));
>     
>    /* WHAT TO PUT HERE? */
> 
>     return Qtrue;
> }
> 
> void
> Init_add_method()
> {
>     rb_define_method(rb_cClass, "add_method", rb_class_add_method, 2);
> }
> 
> ######################################
> 
> First I thought of rb_define_method( class, name, C-function, arity ),
> but realizing that it expects a C funtion I gave up that idea.
> Then I had a look on rb_add_method which expects a NODE instead. If there
> is any way to get from a Proc to a NODE I figured I could use this.
> 
> Any comments are greatly appreciated.
> 
> Please excuse my lack of insight in the internals of Ruby.

Well, actually a proc is generally passed as a VALUE.  Check out
eval.c:rb_mod_define_method().  If you look at the code:

    if (TYPE(body) != T_DATA) {
        /* type error */
        rb_raise(rb_eTypeError, "wrong argument type (expected Proc)");
    }
    if (RDATA(body)->dmark == (RUBY_DATA_FUNC)bm_mark) {
        rb_add_method(mod, id, NEW_DMETHOD(method_unbind(body)), NOEX_PUBLIC);
    }
    else if (RDATA(body)->dmark == (RUBY_DATA_FUNC)blk_mark) {
        rb_add_method(mod, id, NEW_BMETHOD(body), NOEX_PUBLIC);
    }
    else {
        /* type error */
        rb_raise(rb_eTypeError, "wrong argument type (expected Proc)");
    }

It expects one of two things: a method itself or a block.  If you look at 
the second part, you see that it calls NEW_BMETHOD(body), which is what 
wraps the Proc to make it "become" a method.  So though they're not 
equivalent, there's a simple built-in way to make a Proc act like a real 
method at that level.

Hope this helps :)

-- 
 Brian Fundakowski Feldman           \  FreeBSD: The Power to Serve!  /
 green@FreeBSD.org                    `------------------------------'


In This Thread

Prev Next