[lnkForumImage]
TotalShareware - Download Free Software

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


 

Forums >

comp.lang.ruby

DRb, Ruby & JRuby - Questions & Issues / dynamic method calls

x1

12/19/2006 3:44:00 AM

# I overview after these examples to ease the pain :-)

@@connection = Java::Connect(usr,pass)

# This works:
@@connection.getForeignListing.getListing(1441).getStreet #=> 123 Candy Ln.

# This works:
@@connection.send("getForeignListing").send("getListing",
1441).send("getStreet") #=> 123 Candy Ln.

# This works:
def test(a,b,c,d)
return @@connection.send(a).send(b,c).send(d)
end
test("getForeignListing", "getListing", 1441, "getStreet")

------------------------------------------------
# Does not work:
def test(a,b,c)
return @@connection.send(a).send(b).send(c)
end
test("getForeignListing", ["getListing", 1441], "getStreet")

test.rb:4:in `send': ["getListing", 5053500] is not a symbol (TypeError)
------------------------------------------------

In summary, I've managed to hook the working versions above within a
class for a DRb server.

The ultimate goal, is to create a generic DRb method that client input
into into method-syntax that the connection can interpret.

For example, as mentioned above, this works:
@@connection.getForeignListing.getListing(1441).getStreet

I'd like to create a method in the DRb server that could accept something like:
java_call = "getForeignListing.getListing(1441).getStreet"
@@connection.send(java_call)

This would allow me to dynamically manage the java methods via DRb.

Thanks so much for your input.

2 Answers

Eric Hodel

12/19/2006 7:23:00 AM

0

On Dec 18, 2006, at 19:43, x1 wrote:

> ------------------------------------------------
> # Does not work:
> def test(a,b,c)
> return @@connection.send(a).send(b).send(c)
> end
> test("getForeignListing", ["getListing", 1441], "getStreet")
>
> test.rb:4:in `send': ["getListing", 5053500] is not a symbol
> (TypeError)

This won't ever work.

$ ri Object#send
------------------------------------------------------------ Object#send
obj.send(symbol [, args...]) => obj
obj.__send__(symbol [, args...]) => obj
------------------------------------------------------------------------
Invokes the method identified by symbol, passing it any arguments
specified. You can use __send__ if the name send clashes with an
existing method in obj.

You want:

send(*['getListing', 5053500])

--
Eric Hodel - drbrain@segment7.net - http://blog.se...

I LIT YOUR GEM ON FIRE!


x1

12/19/2006 12:01:00 PM

0

Thank you Eric

On 12/19/06, Eric Hodel <drbrain@segment7.net> wrote:
> On Dec 18, 2006, at 19:43, x1 wrote:
>
> > ------------------------------------------------
> > # Does not work:
> > def test(a,b,c)
> > return @@connection.send(a).send(b).send(c)
> > end
> > test("getForeignListing", ["getListing", 1441], "getStreet")
> >
> > test.rb:4:in `send': ["getListing", 5053500] is not a symbol
> > (TypeError)
>
> This won't ever work.
>
> $ ri Object#send
> ------------------------------------------------------------ Object#send
> obj.send(symbol [, args...]) => obj
> obj.__send__(symbol [, args...]) => obj
> ------------------------------------------------------------------------
> Invokes the method identified by symbol, passing it any arguments
> specified. You can use __send__ if the name send clashes with an
> existing method in obj.
>
> You want:
>
> send(*['getListing', 5053500])
>
> --
> Eric Hodel - drbrain@segment7.net - http://blog.se...
>
> I LIT YOUR GEM ON FIRE!
>
>
>