Referring to an instance method using a variable

Discussion in 'Ruby' started by Jos Backus, Aug 11, 2006.

  1. Jos Backus

    Jos Backus Guest

    As part of a larger program I am trying to convert the following Perl code to
    Ruby:

    lizzy:~% cat ptest
    sub equals {
    my($a, $b) = @_;
    return $a eq $b ? 1 : 0;
    }

    my $ops = {
    '=' => sub { my ($a, $b) = @_; return $a eq $b ? 1 : 0; },
    '==' => \&equals,
    };

    print $ops->{'='}(1, 1);
    print $ops->{'=='}(1, 2);
    lizzy:~% perl -l ptest
    1
    0
    lizzy:~%

    This is what I have come up with:

    lizzy:~% cat rtest
    OPS = {
    '=' => proc { |a, b| return a == b ? 1 : 0 },
    '==' => proc { |a, b| send:)equals, a, b) },
    }

    def equals(a, b)
    return a == b ? 1 : 0
    end

    puts OPS['='].call(1, 1)
    puts OPS['=='].call(1, 2)
    lizzy:~% ruby rtest
    1
    0
    lizzy:~%

    But the `==' case is rather ugly. Is there a shorter way than saying `proc {
    |a, b| send:)equals, a, b) }'? I.e. is there a way to avoid using the proc
    wrapper?

    I guess one the problems is that unlike in Python, parentheses are optional
    Ruby. This means that `equals' returns what I am looking for in Python but in
    Ruby it causes `equals' to be called. (In Python one has to use `equals()' to
    actually perform the call).

    Ideas, anybody?

    Thanks,
    --
    Jos Backus
    jos at catnook.com
    Jos Backus, Aug 11, 2006
    #1
    1. Advertising

  2. Jos Backus

    Guest

    On Aug 10, 2006, at 9:33 PM, Jos Backus wrote:
    > This is what I have come up with:
    >
    > lizzy:~% cat rtest
    > OPS = {
    > '=' => proc { |a, b| return a == b ? 1 : 0 },
    > '==' => proc { |a, b| send:)equals, a, b) },
    > }
    >
    > def equals(a, b)
    > return a == b ? 1 : 0
    > end
    >
    > puts OPS['='].call(1, 1)
    > puts OPS['=='].call(1, 2)
    > lizzy:~% ruby rtest
    > 1
    > 0
    > lizzy:~%


    Is there supposed to be a semantic difference between the '=' and '=='
    operator in what you are trying to accomplish or are you just trying to
    implement '=' as a proc and '==' as a method?

    Does this help at all?

    def equals(a, b)
    return a == b ? 1 : 0
    end

    OPS = {
    '=' => proc { |a, b| return a == b ? 1 : 0 },
    '==' => method:)equals),
    }

    puts OPS['='].call(1, 1)
    puts OPS['=='].call(1, 2)


    Gary Wright
    , Aug 11, 2006
    #2
    1. Advertising

  3. Jos Backus

    Jos Backus Guest

    On Fri, Aug 11, 2006 at 10:56:45AM +0900, wrote:
    > Is there supposed to be a semantic difference between the '=' and '=='
    > operator in what you are trying to accomplish or are you just trying to
    > implement '=' as a proc and '==' as a method?


    The latter. It's just an example. They are operators in a templating language
    we use at work.

    >
    > Does this help at all?
    >
    > def equals(a, b)
    > return a == b ? 1 : 0
    > end
    >
    > OPS = {
    > '=' => proc { |a, b| return a == b ? 1 : 0 },
    > '==' => method:)equals),
    > }
    >
    > puts OPS['='].call(1, 1)
    > puts OPS['=='].call(1, 2)


    It sure does. But I could have sworn I tried that, which is why I posted :-/
    Guess not.

    Thanks Gary!

    --
    Jos Backus
    jos at catnook.com
    Jos Backus, Aug 11, 2006
    #3
    1. Advertising

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

It takes just 2 minutes to sign up (and it's free!). Just click the sign up button to choose a username and then you can ask your own questions on the forum.
Similar Threads
  1. =?ISO-8859-1?Q?Ernesto_Garc=EDa_Garc=EDa?=

    [Newbie] Referring to a global variable inside a function

    =?ISO-8859-1?Q?Ernesto_Garc=EDa_Garc=EDa?=, Apr 9, 2006, in forum: Python
    Replies:
    4
    Views:
    353
    bruno at modulix
    Apr 10, 2006
  2. Paul  Moore
    Replies:
    5
    Views:
    184
    Paul Moore
    Dec 6, 2011
  3. David Garamond
    Replies:
    5
    Views:
    216
    Ara.T.Howard
    Jun 8, 2004
  4. Raj Singh
    Replies:
    2
    Views:
    186
    Rick DeNatale
    May 29, 2008
  5. Greg Hauptmann
    Replies:
    9
    Views:
    232
    Loren Segal
    Jun 16, 2008
Loading...

Share This Page