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

Reply via email to