By "object" i mean some variable instantiated with conew - not a J type.
I am writing an object serializer, and looked at
https://code.jsoftware.com/wiki/Scripts/Serialization

A modified version of this works somewhat, but it has problems  with
 if. a: -: c=. {.(copath ::(a:"_) y)-.<,'z' do.
...
else.
...
end.

the above test is to check whether some variable is an object or a J type.
It fails on some of my classes for the reasons I explained in my last email.

It seems 18!:0 works for the case I gave, but in general will not work,
e.g. if m__myOtherClass =: 1
18!:0 < m__myOtherClass
will give an rank error.

The serializer I am writing is 90% complete. It just fails when an object's 
primitive member 
variable is inherited from a parent class. Then my serializer thinks the member 
is an object type, because
the primitive test,
a: -: c=. {.(copath ::(a:"_) y)-.<,'z' 
fails.
 


--------------------------------------------
On Tue, 7/10/18, Henry Rich <[email protected]> wrote:

 Subject: Re: [Jprogramming] Test whether class member is primitive
 To: [email protected]
 Date: Tuesday, July 10, 2018, 10:56 AM
 
 I don't understand the term
 'object'.
 
 Does that
 mean 'numbered locale'?  If so, then a test for
 objectness 
 would be
 
 1 = 18!:0
 
 
 Henry Rich
 
 On
 7/9/2018 9:41 PM, 'Jon Hough' via Programming
 wrote:
 > I want to test if a given member
 variable of an object is  primitive  (e.g. one of the J
 datatypes - literal, integer etc etc) or an object.
 >
 > coclass
 'MyClass'
 >
 >
 create=: 3 : 0
 > m=:
 'something'
 > )
 >
 >
 >
 Here is one method:
 >
 > myClass =: '' conew
 'MyClass'
 >   a: -:  {. (copath
 ::( a:"_) m__myClass) -. <, 'z' NB. return 1
 if primitive, 0 if an object.
 >
 > This works, except if the member is
 defined in a parent class.
 >
 > coclass 'MyOtherClass'
 > coinsert 'MyClass'
 >
 > create=: 3 : 0
 > create_MyClass_ f. ''
 > ''
 > )
 >
 >
 >
 myOtherClass =: '' conew 'MyOtherClass'
 >   a: -:  {. (copath ::( a:"_)
 m__myOtherClass) -. <, 'z'
 >
 >
 >
 the above returns 0, but member is a primitive member of the
 MyOtherClass instance. Ideally this
 >
 should return 1 in this case, since m is still a primitive
 member of MyOtherClass.
 >
 > Any better way to test for primitive
 members?
 >
 >
 Thanks,
 > Jon
 >
 ----------------------------------------------------------------------
 > For information about J forums see http://www.jsoftware.com/forums.htm
 
 
 ---
 This email has been checked for viruses by
 AVG.
 https://www.avg.com
 
 ----------------------------------------------------------------------
 For information about J forums see http://www.jsoftware.com/forums.htm
----------------------------------------------------------------------
For information about J forums see http://www.jsoftware.com/forums.htm

Reply via email to