comp.lang.idl-pvwave archive
Messages from Usenet group comp.lang.idl-pvwave, compiled by Paulo Penteado

Home » Public Forums » archive » Object Funkiness
Show: Today's Messages :: Show Polls :: Message Navigator
E-mail to friend 
Switch to threaded view of this topic Create a new topic Submit Reply
Object Funkiness [message #9658] Wed, 30 July 1997 00:00 Go to next message
J.D. Smith is currently offline  J.D. Smith
Messages: 214
Registered: August 1996
Senior Member
OK OOP experts. Here's a conundrum...

here's a procedure to test dynamic binding of methods in IDL...

pro testdb
a=obj_new('eeke','a')
b=obj_new('eeke','b')
list=[a,b]
ran=fix(randomu(sd) ge .5)
list[ran]->Message, ran, 1-ran
obj_destroy,list
return
end


and the file eek__define.pro contains:

pro eeke::Message, ran, ran2
print,self.val,' random: ',ran, ran2
return
end
function eeke::Init,val
self.val=val
return,1
end
pro eeke__define
struct={eeke,val:''}
return
end


When I run it I get

IDL> testdb

list[ran]->Message, ran, 1-ran
^
% MESSAGE: Incorrect number of arguments.
At: /u/jdsmith/idl/pro/mylib/testdb.pro, Line 6
% Compiled module: TESTDB.
% Attempt to call undefined procedure/function: 'TESTDB'.
% Execution halted at: $MAIN$



If I change the name of Message to something else, or take away the
arguments to message in both the method definition and the call, the
error disappears. Is 'message' somehow different than other names? I
thought it could be shadowing the idl built-in message, and screwing up
the dynamic binding, but I've tried tons of other built-in names (like
'print', 'xmanager', etc.) with nary a problem. Perhaps 'Message' is
some IDL internal method for all objects... anyway it is very
troublesome, and I'd like to figure out the cause. Any help would be
greatly appreciated.

JD

P.S. Except for this problem, dynamic binding seems to work well.
Re: Object Funkiness [message #9730 is a reply to message #9658] Mon, 04 August 1997 00:00 Go to previous message
J.D. Smith is currently offline  J.D. Smith
Messages: 214
Registered: August 1996
Senior Member
Phil Williams wrote:
>
> J.D. Smith wrote:
>>
>> J.D. Smith wrote:
>>>
>>> OK OOP experts. Here's a conundrum...
>>>
>>> here's a procedure to test dynamic binding of methods in IDL...
>>>
>>> pro testdb
>>> a=obj_new('eeke','a')
>>> b=obj_new('eeke','b')
>>> list=[a,b]
>>> ran=fix(randomu(sd) ge .5)
>>> list[ran]->Message, ran, 1-ran
>>> obj_destroy,list
>>> return
>>> end
>>>
>>> and the file eek__define.pro contains:
>>>
>>> pro eeke::Message, ran, ran2
>>> print,self.val,' random: ',ran, ran2
>>> return
>>> end
>>> function eeke::Init,val
>>> self.val=val
>>> return,1
>>> end
>>> pro eeke__define
> ^^^^^^^^^^^^^^^^^
> The __define method should be a FUNCTION. I'm sure once this is done
> everything should work fine.
>
>>> struct={eeke,val:''}
>>> return
>>> end
>>>
>
> phil

I think perhaps you're thinking of the INIT class method -- __defines
are in fact procedures, I believe. It's really a problem with the
compiler parsing method names incorrectly for methods which shadow IDL
builtin's, with some conditions affecting whether the error will occur.
I've alerted RSI Tech Support and they're working on it, but for now,
avoid method names such as 'Message', 'Wait', 'Wset', and likely several
more.

JD
  Switch to threaded view of this topic Create a new topic Submit Reply
Previous Topic: hdf vgroups
Next Topic: call external, callable idl or linkimage ?

-=] Back to Top [=-
[ Syndicate this forum (XML) ] [ RSS ] [ PDF ]

Current Time: Wed Oct 08 11:41:36 PDT 2025

Total time taken to generate the page: 0.00594 seconds