[lnkForumImage]
TotalShareware - Download Free Software

Confronta i prezzi di migliaia di prodotti.
Asp Forum
 Home | Login | Register | Search 


 

Forums >

comp.lang.ruby

Calling a procedure with dinamyc name

Marcelo (PC)

6/4/2005 5:53:00 PM

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!



5 Answers

Francis Hwang

6/4/2005 5:59:00 PM

0


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.



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

Francis Hwang
http://f...



Marcelo (PC)

6/4/2005 6:06:00 PM

0

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.
>
>
>
>> --
>> Este correo esta libre de virus!
>>
>>
>>
>
> Francis Hwang
> http://f...
>
>
>

--
Este correo esta libre de virus!



Ryan Leavengood

6/4/2005 6:08:00 PM

0

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

6/4/2005 6:10:00 PM

0

You could look at either Object#methods or Object#respond_to? depending
on how you want to do it.

On Jun 4, 2005, at 2:05 PM, Marcelo Paniagua wrote:

> 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.
>>
>>
>>
>>> --
>>> Este correo esta libre de virus!
>>>
>>>
>>>
>>
>> Francis Hwang
>> http://f...
>>
>>
>>
>
> --
> Este correo esta libre de virus!
>
>
>

Francis Hwang
http://f...



Marcelo (PC)

6/4/2005 6:13:00 PM

0

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ó:

> 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
>
>

--
Este correo esta libre de virus!