Yes, you are correct, thanks: 1 = 18!:0 :: _3: n__child 0 1 = 18!:0 :: _3: m__child 0 1 = 18!:0 :: _3: other__child 1 Seems to work fine! Although, in this case, I am not entirely sure what _3: does. What exactly is it doing? Nuvoc doesn't seem to have any example using it.
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:52 AM It looked to me that using 1 = 18!:0 :: _3: would solve your problem. Henry Rich On 7/9/2018 10:50 PM, 'Jon Hough' via Programming wrote: > 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 --- 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
