I have few more problems

How can we make C routine call a "method" defined in a ruby script ?
I am familiar with extending ruby to call C routines with/without swig.
But I was not able to find a easy solution for it. The only way it may
workout is spawning the script in a different process/thread from C code
and then make it do all query/answer sequence by calling a C routine. Is
there a easy way out?
Can't we make a C routine call a specific method in a Ruby Script.

Can we access a C stack from Ruby  or vice versa while debugging the
Ruby extension.

Regards,
Saumya.


-----Original Message-----
From: Rick DeNatale [mailto:rick.denatale / gmail.com]
Sent: Wednesday, August 23, 2006 10:41 PM
To: ruby-talk ML
Subject: Re: Can methods be part of a array

On 8/23/06, Jan Svitok <jan.svitok / gmail.com> wrote:
> On 8/23/06, Dikshit Saumya-G19445 <somc / motorola.com> wrote:
> > Hi
> > I am a newbie to this mailing list.
> >
> > I have a couple of queries:> >
> > 1. Can methods be part of an array definition, which can bear 
> > similarity to 'C' definitions
> >    of "array of function pointers", as part of a state machine 
> > implementation.
>
> Look up Object#method and Method in the docs:
>
> you can do ['aaa'.method(:size), 10.method("+")]
>
> UnboundMethod could be useful as well.
>
> Other than that, its possible to call methods by name. I you just need

> to call methods on one object, it is enough to store just their names 
> (preferably as symbols):
>
> methods = [:size, :length, :whatever]
>
> then you would for example do: methods.each {|m| 'aaaa'.send(m) }
>
>


Another approach would be to use Procs in the array instead of methods,
this would allow you to store arguments in the array entries as well,
and to execute more than just a method.

actions = [
  lambda {obj.size},
  lambda {obj.length},
  lambda {obj.foo(3, "abc") }
  lambda {puts "Hi Mom!"; obj.callhome } ]

then to invoke an action it's just

actions[n].call

as a variation on this, if the blocks have parameters, you can use
call(arg1, [arg2,...]) to pass parameters.

--
Rick DeNatale

My blog on Ruby
http://talklikeaduck.denhaven2.com/