Object Funkiness [message #9658] |
Wed, 30 July 1997 00:00  |
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.
|
|
|