Marton:  apologies for badly characterizing your post.  I particularly
wanted specify the breakage you mentioned for any beginners passing by;
got delayed and forgot about some of your post.

I just mentioned the basic dual nature of Nil. There is a lot of
complexity around 'Nil' and around containerization, without using
them together.

Restating my initial point:  Deprecating 'undefine' is just making
something easy more difficult.  Not finding any justification for this
change, I now see it as self-inflicted bug scheduled to arrive soon.

I have had some thoughts similar to yours about how containers might be
implemented, but I think education about the current state is a good path.
That could be more docs, and also callables which may have little point
but as educational demonstrations.

Rob

On Fri, Mar 17, 2023 at 04:58:30PM -0400, rir wrote:
> Marton, I am not sure of your meaning.  I took the warning message as:
> 
>     For Scalars assign a Nil, for Arrays/Hashes/Etc. use Empty or ().
> 
> Because you might be read as suggesting "@ary = Nil should undefine @ary";
> I will point out that will conflict with:
> 
>     @a = Nil;
> 
> which is defined to assign the RHS entry to the first element of @a.
> I suspect there is no way to destroy a container but to smash it into
> a scope wall.
> 
> Some day I shall get serious about understanding Raku's containers.
> In the meantime, I'll just keep creeping up on them and observing.
> 
> Rob
> 
> 
> On Tue, Mar 14, 2023 at 01:38:22PM +0100, Polgár Márton wrote:
> > On 2023. 03. 14. 4:42, rir wrote:
> > >      undefine seen at:
> > >        <unknown file>, line 1
> > >      Will be removed with release v6.e!
> > >      Please use another way: assign a Nil; for Arrays/Hashes, assign 
> > > Empty or () instead.
> > > 
> > > Will that deprecation require a conditional and two assignments
> > > for mixed data?
> > > 
> > > [$a, @a, $b, %c, $c, &d].map: { .&undefine};
> > > 
> > > [$a, @a, $b, %c, $c, &d].map(
> > >      { $_ = $_ ~~ (Associative,Positional).any ?? Empty !! Nil });
> > 
> > And even those ways don't seem too convincing... after all, it's more a
> > question of containerization if assigning Nil will cut it or not. I didn't
> > know about undefine but it appeared to me as an issue that you can just
> > assign Nil to an Array and get something that is not the default value -
> > moreover, it doesn't even evaluate to boolean False!
> > 
> > It seemed like something that can wait and that could cause a lot of
> > friction as a breaking change but I think it would make overwhelmingly more
> > sense to make Nil always set the default. It is a special value of a special
> > singularity type on its own; it's questionable whether it should ever appear
> > as an assigned element of a composite container but to make it STORE in a
> > special, resetting way, seems kind of a no-brainer, apart from the
> > "breakage"...
> 

Reply via email to