Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

Calling a procedure with dinamyc name

0 views
Skip to first unread message

Marcelo Paniagua

unread,
Jun 4, 2005, 1:52:51 PM6/4/05
to
Hi there!

I'm using Kirbybase database and it has the peculiar way to access
fields data though methods. Is it posible to call such methods
passing the fieldname in a dinamic way?

instead of

client_id = table.client_id

I would like to use sometime like

field = 'client_id'
client_id = table.field or something like that.

This is also applicable to a program that I'm developing, in which I
want to find if a class has a given method... for example, I want to
find if a class Card has an "onplay" method.

Thanks

--
Este correo esta libre de virus!

Francis Hwang

unread,
Jun 4, 2005, 1:58:59 PM6/4/05
to

Maybe you want this:

field = 'client_id'
client_id = table.send field

or maybe you want this

method = table.method :client_id
client_id = method.call

.. you've got quite a few options.

> --
> Este correo esta libre de virus!
>
>
>

Francis Hwang
http://fhwang.net/

Marcelo Paniagua

unread,
Jun 4, 2005, 2:05:44 PM6/4/05
to
For the the Kirbybase it seems like the right option. As for the other
example I have my doubts. What I want to do in that
case is something like this: I have an object of class Card. I want to
look though the object methods and find out if it has
an "onPlay" method, "onLefPlay" method, and so on. I want to do this
in order to let the user knows that he can use those
methods in a given time... Which option do you think is the right option?

Marcelo

Francis Hwang escribió:

>
> On Jun 4, 2005, at 1:52 PM, Marcelo Paniagua wrote:
>
>> Hi there!
>>
>> I'm using Kirbybase database and it has the peculiar way to access
>> fields data though methods. Is it posible to call such methods
>> passing the fieldname in a dinamic way?
>>
>> instead of
>>
>> client_id = table.client_id
>>
>> I would like to use sometime like
>>
>> field = 'client_id'
>> client_id = table.field or something like that.
>>
>> This is also applicable to a program that I'm developing, in which
>> I want to find if a class has a given method... for example, I want to
>> find if a class Card has an "onplay" method.
>> Thanks
>>
>
> Maybe you want this:
>
> field = 'client_id'
> client_id = table.send field
>
> or maybe you want this
>
> method = table.method :client_id
> client_id = method.call
>

> ... you've got quite a few options.

Ryan Leavengood

unread,
Jun 4, 2005, 2:07:34 PM6/4/05
to
Marcelo Paniagua wrote:
> Hi there!
>
> I'm using Kirbybase database and it has the peculiar way to access
> fields data though methods. Is it posible to call such methods
> passing the fieldname in a dinamic way?
>
> instead of
>
> client_id = table.client_id
>
> I would like to use sometime like
>
> field = 'client_id'
> client_id = table.field or something like that.

There are at least two basic options:

1. Call Object#send:

field = 'client_id'
client_id = table.send(field)

2. Use Object#method to get a method, then call it:

field = 'client_id'
method = table.method(field)
method.call

> This is also applicable to a program that I'm developing, in which I
> want to find if a class has a given method... for example, I want to
> find if a class Card has an "onplay" method.
> Thanks

You can ask an instance of Card if it responds to that method:

card = Card.new
if card.respond_to?('onplay')
# Do something
end

You may also want to research the method 'method_missing' which allows
for a lot of interesting tricks.

Regards,
Ryan


Francis Hwang

unread,
Jun 4, 2005, 2:09:39 PM6/4/05
to
You could look at either Object#methods or Object#respond_to? depending
on how you want to do it.

Francis Hwang
http://fhwang.net/

Marcelo Paniagua

unread,
Jun 4, 2005, 2:12:51 PM6/4/05
to
Thanks! I think that for Kirbybase I will get the method using the
fieldname and for the other case I will use the Object#respond_to?.

Marcelo Paniagua

Ryan Leavengood escribió:

--

0 new messages