[Jprogramming] Test whether class member is primitive

Henry Rich henryhrich at gmail.com
Tue Jul 10 02:52:16 UTC 2018


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 <henryhrich at gmail.com> wrote:
>
>   Subject: Re: [Jprogramming] Test whether class member is primitive
>   To: programming at jsoftware.com
>   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 <henryhrich at gmail.com>
>   wrote:
>   >
>   >   Subject:
>   Re: [Jprogramming] Test whether class member is primitive
>   >   To: programming at jsoftware.com
>   >   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



More information about the Programming mailing list