Mark,
I use a UDF IsObject() to perform the test:
lparameter roObject
return( ( type( "m.roObject" ) == 'O' ) and ( ! isnull( m.roObject ) ) )
Setting an object reference to .null. has always felt like the cleaner way to clear out the pointer to an object. Sometimes you need to know if it ever was assigned to an object. Assigning .f. and causing it to change datatypes isn't quite as good IMO.
>Standard practice seems to be, to set an object's property to .NULL. after releasing an object tied to a property. For example:
>
>o=CREATEOBJECT("empty")
>ADDPROPERTY(o, "o1", CREATEOBJECT("form"))
>o.o1.release()
>o.o1=.null.
>? TYPE("o.o1")
>
>
>It seems it would be better to set the property to .F. instead, after releasing it. That way, anything that tests for TYPE("o.o1") = "O" would not be fooled. Setting the property to .NULL. still leaves the type as "O" (object). Whereas, setting the property to .F. changes the type to "L". Is there a good reason for using .null.? Which requires an additional test using ISNULL(). I often check using TYPE("..") = "O" because the property may not have been created and/or assigned. Thanks for any insight into reasons for using the .NULL. assignment.