pugs> my @array does role {
....> method insert ($x) { @.push($x) if none(self) eqv $x }
....> }
()
pugs> my @array=(1..5);
pugs> @array.insert($_) for 1,2,6;
pugs> say @array
123456
Bool::True
BTW: Could I put the initialization in the definition too? I tried with
pugs> my @array does role {
....> method insert ($x) { @.push($x) if none(self) eqv $x }
....> } = (1..5);
(1, 2, 3, 4, 5)
and it works, but it doesn't with the assignment directly to the right of @array, OTOH I'm sure most people would find it to be more intuitive, while this way they would just say: "for clarity, initialize it in a separate statement."
BTW: why doesn't the following work, instead?
pugs> my @array does role {
....> multi method insert ($x) { @.push($x) if none(self) eqv $x }
....> multi method insert (@x) { @.insert($_) for @x }
....> } = 1..5;
(1, 2, 3, 4, 5)
pugs> @array.insert(3..7);
pugs> say @array
1234534567
Bool::True
(If I use *@x, pugs "hangs", instead.)
BTW: (the last, really!) what is self supposed to be? After all no suitable and short enough variable/pronoun was found? The following is all that pugs can tell me:
pugs> self
macro {Prim ([Pugs.AST.Internals.Val] -> Pugs.AST.Eval.Eval Pugs.AST.I
+nternals.Val)}
Update: Two of the questions asked here were reposted in separate new threads in
|