18!:0 y checks the status of y when viewed as a locale-name.
Unfortunately if y is totally bogus as a locale-name, 18!:0 fails with
rank/domain/whatever error.
[Jon, if you add a request to system/interpreter/requests to remind me,
I will modify 18!:0 to return _3 for malformed locale rather than the
error.]
This is where (u :: v) is useful. It is a verb that executes u
returning its result, except that if u fails, the verb executes v and
returns the result of that.
So here, 18!:0 :: _3: is saying 'is y a locale? and if you get an
error, just return _3.' Remember _3: is a verb that always returns _3,
same as _3"_ .
Henry Rich
On 7/9/2018 10:57 PM, 'Jon Hough' via Programming wrote:
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
---
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