|
Welcome the channel on the development of Cro, a set of libraries for building reactive distributed systems, lovingly crafted to take advantage of all the Raku Programming Language has to offer (cro.services). This channel is being logged for historical purposes. Set by lizmat on 24 May 2021. |
|||
| m_zero | I'm wondering what is the plan for prefix // and prefix ||? Prefix // seems useful: It tests for "definedness". It isn't implemented in the current release... but src/Raku/ast implements it and can parse it. On the other hand, prefix || seems not useful: it always just returns its argument unchanged (as far as I can tell or infer). It is implemented in the current release... but src/Raku/ast doesn't support it at all. | 07:38 | |
|
07:50
lizmat left
|
|||
| SmokeMachine | Isn’t it for being able to align the || on every line, as it can be done on regex? | 08:11 | |
|
11:06
patrickb left
|
|||
| jubilatious1_98524 | @m_zero On another note, I'm not sure I understand the need for prefix // when we can metaop just about anything: | 11:14 | |
| m: my @a = 1..3; my @b = (); say [&&] @a,@b; | 11:15 | ||
| Raku eval | [] | ||
| jubilatious1_98524 | m: my @a = 1..3; my @b = (); say [&&] @b,@a; | ||
| Raku eval | [] | ||
| jubilatious1_98524 | m: my @a = 1..3; my @b = (); say [||] @a,@b; | ||
| Raku eval | [1 2 3] | ||
| jubilatious1_98524 | m: my @a = 1..3; my @b = (); say [||] @b,@a; | 11:16 | |
| Raku eval | [1 2 3] | ||
| jubilatious1_98524 | m: my @a = 1..3; my @b = (); say [//] @a,@b; | ||
| Raku eval | [1 2 3] | ||
| jubilatious1_98524 | m: my @a = 1..3; my @b = (); say [//] @b,@a; | 11:17 | |
| Raku eval | [] | ||
|
11:37
librasteve_ left
|
|||
| m_zero | @jubilatious1_98524 I think the use case is in checking if a scanner has been defined. | 11:48 | |
|
11:48
lizmat joined
|
|||
| m: use v6.*; my $a; say //$a; | 11:49 | ||
| Raku eval | False | ||
|
11:56
lizmat left
12:19
patrickb joined
12:27
lizmat joined
12:28
lizmat left
12:45
rba left
13:00
rba joined
13:14
lizmat joined
13:16
lizmat left,
lizmat_ joined
13:19
lizmat_ left
13:32
librasteve_ joined
|
|||
| .landyacht. | Does it have the same precedence as defined? If it were a bit tighter that would be nice, specifically tighter than ?? so ternaries based on definedness are easier | 14:14 | |
| librasteve | it has symbolic unary precedence | 14:19 | |
| ! + - ~ ? | || +^ ~^ ?^ ^ // <== same as these guys - which I think is what you want | 14:20 | ||
| m: my $x = 1; say //$x ?? 'yo' !! 'no'; | 14:22 | ||
| Raku eval | Exit code: 1 ===SORRY!=== Error while compiling /home/glot/main.raku Null regex not allowed. Please use .comb if you wanted to produce a sequence of characters from a string. at /home/glot/main.raku:1 ------> my $x = 1; say //⏏$x ?? 'yo' !! 'no'; | ||
| librasteve | hmm sadly not | ||
| oh its 6.e | |||
| m: use 6.e.*; my $x = 1; say //$x ?? 'yo' !! 'no'; | 14:23 | ||
| Raku eval | Exit code: 1 ===SORRY!=== Error while compiling /home/glot/main.raku Malformed postfix call at /home/glot/main.raku:1 ------> use 6.e.*⏏; my $x = 1; say //$x ?? 'yo' !! 'no'; | ||
| librasteve | m: m: use v6.*; my $x = 1; say //$x ?? 'yo' !! 'no'; | 14:24 | |
| Raku eval | Exit code: 1 ===SORRY!=== Error while compiling /home/glot/main.raku Too late to switch language version. Must be used as the very first statement. at /home/glot/main.raku:1 ------> m: use v6.*⏏; my $x = 1; say //$x ?? 'yo' !! 'no'; | ||
| librasteve | huh | ||
| anyway when I use v6 on my local box still get the same Null regex error | 14:25 | ||
| .landyacht. | She’s putting up a fight 😆 | ||
| I wonder if something about the surrounding context confuses the parser | 14:26 | ||
| librasteve | yeah - maybe | ||
| guess I would defer to one of the grown ups on this... | |||
| jubilatious1_98524 | m: use v6.*; my $x = 1; say //$x ?? 'yo' !! 'no'; | 16:08 | |
| Raku eval | yo | ||
| jubilatious1_98524 | m: use v6.*; my $x = 1; say $x ?? 'yo' !! 'no'; | 16:09 | |
| Raku eval | yo | ||
| jubilatious1_98524 | m: use v6.*; my $x = Nil; say //$x ?? 'yo' !! 'no'; | 16:17 | |
| Raku eval | no | ||
| jubilatious1_98524 | m: use v6.*; my $x = Nil; say $x ?? 'yo' !! 'no'; | 16:18 | |
| Raku eval | no | ||
| [Coke] | v6.* is only needed for experimental preview. | 16:21 | |
| (per the docs) | |||
| m: my $x = Nil; say //$x ?? 'yo' !! 'no'; # try without... | 16:22 | ||
| ah. ok, tried that locally and in #raku, without the v6.c it dies. | |||
| er, v6.* | 16:23 | ||
| ... what are you trying to do with //$x ? | 16:25 | ||
| I've only see // as an infix. | |||
| like 'my $x; say $x // "default value"' | |||
| ah. docs.raku.org/language/operators#prefix_// | 16:26 | ||
| ... available only in 6.e, so that tracks. | |||
| ok, I was only paying attention from the code samples, what's the actual issue, sorry? | 16:28 | ||
| jubilatious1_98524 | m: my $a = Nil; say !!$a; | 18:59 | |
| Raku eval | False | ||
| jubilatious1_98524 | m: use v6.e; my $a = Nil; say //$a; | 19:00 | |
| Raku eval | Exit code: 1 ===SORRY!=== Error while compiling /home/glot/main.raku Raku v6.e requires PREVIEW modifier at /home/glot/main.raku:1 ------> use v6.e⏏; my $a = Nil; say //$a; | ||
| jubilatious1_98524 | m: use v6.e.* my $a = Nil; say //$a; | 19:02 | |
| Raku eval | False | ||
| jubilatious1_98524 | m: use v6.e.* my $a = Nil; say !!$a; | 19:03 | |
| Raku eval | False | ||
| jubilatious1_98524 | I'm not seeing a difference between the new //boolean coercer, and the classic !! "bang-bang" (or not-not) double boolean method. | 19:06 | |
| m: use v6.e.* my $a = 1; say !!$a; | 19:09 | ||
| Raku eval | True | ||
| jubilatious1_98524 | m: use v6.e.* my $a = 0; say !!$a; | ||
| Raku eval | False | ||
| librasteve_ | [Coke] earlier today we had these three examples of prefix `//` | 19:19 | |
| m: use v6.*; dd //Nil | 19:20 | ||
| #True | |||
| m: use v6.*; dd //1 | |||
| #True | |||
| m: use v6.*; dd //0 | |||
| #True | |||
| arggh - the first one is False of course | 19:21 | ||
| then the idea arose to use `//` as a modifier on the test in a ternary like | |||
| m: my $x = Nil; say //$x ?? 'yo' !! 'no'; | 19:22 | ||
| as you saw above this errors, shame | |||
| the question is, is the compiler too eager to pick `//` up and error as an empty regex in this case | 19:23 | ||
| [btw Camelia is dead for me] | |||
| [Coke] | You need to have v6.e.PREVIEW enabled, I think | 19:29 | |
| which v6.* does | |||
| camelia doesn't work in here, but does in #raku | 19:30 | ||
| yah, just tested that line with v6.* in #raku, it works. | 19:31 | ||
| so if you want the experimental stuff, you'll need to scope it for the entire file (script or module) | 19:32 | ||
| librasteve | tx! | 19:37 | |
| m_zero | @librasteve - surely there is a difference between Nil and the state of being undefined. Hence, it makes sense to me that //Nil should indeed return True | 21:56 | |
| @jubilatious1_98524 - // is a test for definedness, not "truthiness" | 21:58 | ||
| m: use v6.*; my $n = Nil; dd //$n; dd !!$n; | 21:59 | ||
| Raku eval | Bool::False Bool::False | ||
| m_zero | Gah! does Nil mean the same as undefined? Surely that isn't so.... | ||
| Nevermind - it indeed does let you undefine a variable. Okay then.... | 22:01 | ||
| librasteve | m: use v6.*; my $n; dd //$n; | 22:25 | |
| Raku eval | Bool::False | ||
| librasteve | yeah assign Nil just resets a var to its default, in this case (Any) | ||
| [Coke] | you can see the difference with a typed var declaration. | 22:44 | |
| cokebot9000 | m: my Int $a = 3; $a=Nil; dd $a | 22:47 | |
| Raku eval | Int $a = Int | ||
| SmokeMachine | Boolean coerced? Shouldn’t it be ? Or so? | ||
| m: say ?42 | 22:48 | ||
| [Coke] | ? is boolean, // is "defined", I think | ||
| cokebot9000 | m: use v6.*; dd ?False; dd //False; | 22:49 | |
| Raku eval | Bool::False Bool::True | ||
| cokebot9000 | ^^ | ||
|
23:41
lizmat joined
23:44
lizmat left
|
|||