Sorry for the lack of clarity. The answer is yes, a boxed numbered locale. Please see my last email (you may have missed it because we seemed to have sent at about the same time.) My contrived example shows the root of the problem.
You are correct that this method is fragile, but I don't know any other method. Mixing up a boxed number locale with a boxed string of digits should never be an issue with any of my classes. If a variable is a boxed string of digits then it is safe to assume it as a locale. Anyway, my previous email gave a specific example of when this problem occurs, and what I need to do to fix it to some extent. Thanks, Jon -------------------------------------------- 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, 11:36 AM Is an 'object' a boxed numbered locale? This is a yes-or-no question, and I think you are saying 'yes', but I want to be sure. Perhaps you should use 18!:0 :: _3: ? You will always have the problem of distinguishing a boxed string of digits from a locale-name. Looking at the path is a bad idea and fragile. Paths may be changed or set to empty based on the programmer's needs. Henry Rich On 7/9/2018 10:16 PM, 'Jon Hough' via Programming wrote: > 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 --- 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
