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

Reply via email to