Calling a procedure with dinamyc name

Discussion in 'Ruby' started by Marcelo Paniagua, Jun 4, 2005.

  1. 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
     
    Marcelo Paniagua, Jun 4, 2005
    #1
    1. Advertisements

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



    Francis Hwang
    http://fhwang.net/
     
    Francis Hwang, Jun 4, 2005
    #2
    1. Advertisements

  3. 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ó:
     
    Marcelo Paniagua, Jun 4, 2005
    #3
  4. 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
    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
     
    Ryan Leavengood, Jun 4, 2005
    #4
  5. You could look at either Object#methods or Object#respond_to? depending=20=

    on how you want to do it.

    Francis Hwang
    http://fhwang.net/
     
    Francis Hwang, Jun 4, 2005
    #5
  6. 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, Jun 4, 2005
    #6
    1. Advertisements

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments (here). After that, you can post your question and our members will help you out.