|
From: Glen S. <gl...@en...> - 2001-04-04 18:02:47
|
---------- Forwarded Message ----------
Subject: RE: [Jython-users] overloading methods
Date: Wed, 4 Apr 2001 11:44:26 -0700
From: Glen Starchman <gl...@en...>
On Wed, 04 Apr 2001, Brian Zimmer wrote:
>
> The correct way to do this is:
>
> def mything(a, b, c=None):
> """ do something, like check if 'c' is not None """
> if c:
> print a, b, c
> else:
> print a, b
But that begins to get complicated if you need to "overload" with several
different types of parameters, doesn't it?
I am not a big fan of overloading, but sometimes it is a necessary evil.
I found an interesting approach with Lua for overloading (bear in mind, I don't
know Lua very well and this is just my interpretation of how it works):
function fn_iii(a,b,c) #takes three integers
function fn_is(a,b) #takes an integer and a string
function fn_ii(a,b) #takes two integers
to call the function, just call fn() with the correct number of params and the
runtime will analyze the params and call the appropriate function. Obviously
the problem comes into play when a param is not a built-in type (eg...some
random object). Not an exactly elegant solution, but it appears to work.
--
c=(0x47, 0x6c, 0x65, 0x6e, 0x40, 0x65,
0x6e, 0x61, 0x62, 0x6c, 0x65, 0x64,
0x76, 0x65, 0x6e, 0x74, 0x75, 0x72,
0x65, 0x73, 0x2e, 0x63, 0x6f, 0x6d)
for z in map(eval("lambda _y:_y "),
range(len(c))):print repr((map(
lambda q:chr(c[z]),c))).join(
chr(c[z])).lower(),
-------------------------------------------------------
--
c=(0x47, 0x6c, 0x65, 0x6e, 0x40, 0x65,
0x6e, 0x61, 0x62, 0x6c, 0x65, 0x64,
0x76, 0x65, 0x6e, 0x74, 0x75, 0x72,
0x65, 0x73, 0x2e, 0x63, 0x6f, 0x6d)
for z in map(eval("lambda _y:-_y "),
range(len(c))):print repr((map(
lambda q:chr(c[z]),c))).join(
chr(c[z])).lower(),
|