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