Retrieving class type
Torsten Anders
torstenanders at gmx.de
Sun Apr 8 13:29:27 CEST 2007
BTW: has anyone an idea whether/how it is possible to access the
default init method of a class?
Best,
Torsten
On 08.04.2007, at 09:17, Torsten Anders wrote:
> Dear Chris,
>
> I recently found some way in the sources of the Inspector using some
> seemingly undocumented functor 'x-oz://boot/Object'. There are also
> ways to get all attributes, or methods of a class (see class
> Reflection below).
>
> BTW: This class makes use of a function Boot_Name.newUnique, which
> allows to "recreate" a name given an atom. I find it very handy to
> have this for the reflection class below. But does this procedure
> not impair the security intended to provide with names?
>
> Best,
> Torsten
>
> %%%%%%%%%%%%%%%%%
> %%
> %% Retrieving class type
> %%
>
> [Boot_Object] = {Module.link ['x-oz://boot/Object']}
> class Example meth init() skip end end
> X = {New Example init()}
>
> {Boot_Object.getClass X}
>
> %%%%%%%%%%%%%%%%%
> %%
> %% Reflection class
> %%
>
> [Boot_Object Boot_Name] = {Module.link ['x-oz://boot/Object'
> 'x-oz://boot/Name']}
>
> /** %% [abstract class] Defines reflection capabilities for
> objects. Please note: this class uses undocumented Oz features, which
> are possibly not intended for end users ;-)
> %% */
> class Reflection
> meth getClass($)
> {Boot_Object.getClass self}
> end
>
> /** %% Returns the print name of the class of self as specified
> in its definition. The name is an atom derived from a variable and
> thus starting with a capital letter, e.g., 'ScoreObject'.
> %% */
> meth getClassName($)
> {self getClass($)}.{Boot_Name.newUnique 'ooPrintName'}
> end
>
> /** %% Returns a list of all attributes (atoms) defined for self.
> %% */
> meth getAttrNames($)
> {Arity {self getClass($)}.{Boot_Name.newUnique 'ooAttr'}}
> end
> /** %% Alias for getAttrNames.
> %% */
> meth getAttributes($) {self getAttrNames($)} end
> /** %% Returns a record where the features are the attributes
> defined for self and the values are the classes which define these
> attributes.
> %% */
> meth getAttrSources($)
> {Dictionary.toRecord {self getClassName($)}
> {self getClass($)}.{Boot_Name.newUnique 'ooAttrSrc'}}
> end
> /** %% Returns a list of all features (atoms) defined for self.
> %% */
> meth getFeatNames($)
> {Arity {self getClass($)}.{Boot_Name.newUnique 'ooFeat'}}
> end
> /** %% Alias for getFeatNames.
> %% */
> meth getFeatures($) {self getFeatNames($)} end
> /** %% Returns a record where the features are the features
> defined for self and the values are the classes which define these
> features.
> %% */
> meth getFeatSources($)
> {Dictionary.toRecord {self getClassName($)}
> {self getClass($)}.{Boot_Name.newUnique 'ooFeatSrc'}}
> end
> /** %% Returns a list of all methods (atoms) defined for self.
> %% */
> meth getMethNames($)
> {Dictionary.keys {self getClass($)}.{Boot_Name.newUnique 'ooMeth'}}
> end
> /** %% Alias for getMethNames.
> %% */
> meth getMethods($) {self getMethNames($)} end
> /* %% [TODO] Get the default arguments of the initialisation
> method...
> %% */
> % meth getInitArgs($)
> % end
> /** %% Returns a record where the features are the methods
> defined for self and the values are the classes which define these
> methods.
> %% */
> meth getMethSources($)
> {Dictionary.toRecord {self getClassName($)}
> {self getClass($)}.{Boot_Name.newUnique 'ooMethSrc'}}
> end
>
> /** %% Returns the value at attribute A.
> %% */
> meth getAttr($ A) @A end
> /** %% Returns the value at feature F.
> %% */
> meth getFeat($ F) self.F end
>
> end
>
>
>
> On 08.04.2007, at 05:50, Chris Rathman wrote:
>> Is there a way to get the class type of a variable? For example, if
>> I have a class like:
>>
>> class Example meth init() skip end end
>>
>> X = {New Example init()}
>>
>> is there a method along the lines of:
>>
>> % {Browse {X.getType()}}
>>
>> Thanks,
>> Chris Rathman
>>
>> ______________________________________________________________________
>> ___________
>> mozart-users mailing list
>> mozart-users at mozart-oz.org
>> http://www.mozart-oz.org/mailman/listinfo/mozart-users
>>
>>
> --
> Torsten Anders
> Sonic Arts Research Centre • Queen's University Belfast
> Frankstr. 49 • D-50996 Köln
> Tel: +49-221-3980750
> http://strasheela.sourceforge.net
> http://www.torsten-anders.de
>
> _______________________________________________________________________
> __________
> mozart-users mailing list
> mozart-users at mozart-oz.org
> http://www.mozart-oz.org/mailman/listinfo/mozart-users
>
>
--
Torsten Anders
Sonic Arts Research Centre • Queen's University Belfast
Frankstr. 49 • D-50996 Köln
Tel: +49-221-3980750
http://strasheela.sourceforge.net
http://www.torsten-anders.de
More information about the mozart-users
mailing list