This channel is intended for people just starting with the Raku Programming Language (raku.org). Logs are available at irclogs.raku.org/raku-beginner/live.html
Set by lizmat on 8 June 2022.
01:02 frost joined
Jodi is there any way to do like 01:28
```perl
given 4 {
when 1 or 4 {
say "1 or 4"
}
```
is there any way to do like
```perl
given 4 {
when 1 or 4 {
say "1 or 4"
}
}
```
it doesnt give any error/warning/whatever but it doesnt work as expected
oh im an idiot, I just need to use `when 1 and 4` for whatever reason 01:30
Kaiepi `1 and 4`'s a bit weird, try `1 | 4` 01:43
Jodi thanks that was it 01:44
May be a stupid question, but how do I actually compile my code instead of just running it through rakudo? Preferably I'd want a binary so it doesn't need to be recompiled each time 01:51
Kaiepi put the bulk of the work in a `.rakumod`, let the `.raku` script put the pieces together 01:53
the module gets precompiled and cached somewhere in the fs 01:54
Jodi Hm?
Kaiepi there isn't a way to compile raku to an executable directly at the moment, but a module as a library should help get rid of some of the precomp time 01:57
past the first run, at least 01:58
03:23 frost30 joined, frost left, frost30 left 04:58 guifa left 04:59 guifa joined 05:33 razetime joined 06:16 razetime left
Nemokosch `when 1 and 4` wasn't right, it just coincidentally gave the same result for this input 07:02
since 1 and 4 evaluates to 4 07:03
that means you need rakudo to run it either way, right? 07:04
Kaiepi yeah 07:07
Nemokosch ☝️ 07:09
pelevesque Does anyone know where I can find a spec for META 07:11
6.json files
Nemokosch docs.raku.org/language/modules#ind...META6.json seems pretty good
pelevesque Thank you so much. 07:17
Nemokosch the historic specification is broader but not everything is actually implemented in zef 07:19
Why can't I grep using :f 07:33
Why can't I grep using :f?
07:56 frost joined
CIAvash You mean check for file? 08:01
08:03 dakkar joined
Nemokosch yes 08:04
CIAvash `.grep: :f` does not smartmatch against `:f`, `f => True` gets passed to `grep`. So you have to write `.grep: * ~~ :f` or `.grep: *.f` 08:25
Nemokosch I mean, what else is :f if not f => True? What is the possible difference? 08:27
CIAvash If a pair like `:f` is smartmatched, Pair's `ACCEPTS` method calls method `f` on the topic. 08:31
docs.raku.org/routine/ACCEPTS#(Pai...od_ACCEPTS
Nemokosch m: 'sadm'.IO ~~ (e => True) andthen .say 08:33
good but that't not what it says on my machine 08:38
``` 08:40
[2] > 'sadm'.IO ~~ (e => True) andthen .say
True
```
oh right, because yeah, this is system specific xd 08:42
so yeah, this does work
so I still don't get why this shouldn't work 09:00
does grep eat up named arguments? 09:01
doesn't seem like that and anyway, why should it 09:02
this doesn't smell right either way, I do pass it as a variable, it shouldn't unroll to a named argument 09:03
and as you can see, smartmatching on the pair does work
anyway, I'm gonna double check 09:04
if I really wrote grep(:f) then grep((:f)) should work I guess 09:05
CIAvash all methods take named arguments, grep is no exception. the fact that passing it as a variable works looks suspicious to me, atm 09:22
Nemokosch It really shouldn't; it would be crazy if a variable unrolled to a named argument 09:26
that would mean that you can't pass a Pair to a function
CIAvash actually, no. It works because the variable is passed to grep and is smartmatched, it just so happens that the variable is a pair 09:28
m: my $test = :test; say :test ~~ $test;
camelia True
CIAvash I think 09:29
Nemokosch and that's why it works and should work
matching against a pair is matching against a pair, regardless whether it looks like :f or f => True
Nahita well when a Pair is passed in those notations to a function, it's interpreted as a keyword arg; to make it positional, we quote the key like "f" => True 09:31
Nemokosch that also seems random but anyway, how do you quote :f ? 😄 09:33
Nahita "f" => True
if :"f" worked, that'd be interesting
Nemokosch that's 'bogus statement'
CIAvash quoting works, but makes no difference here since grep smartmatches. 09:38
Nemokosch it does though 09:40
[1] > ('project_paths', 'random')>>.IO andthen .grep('f' => True)
("project_paths".IO)
[2] > ('project_paths', 'random')>>.IO andthen .grep(f => True)
Cannot resolve caller grep(List:D: :f); none of these signatures matches:
($: Bool:D $t, *%_)
($: Mu $t, *%_)
in block <unit> at <unknown file> line 1
09:43 discord-raku-bot left, discord-raku-bot joined
anyway, .grep((:f)) also works 09:44
or .grep: (:f) I guess
then I guess I hardcoded :f in grep and that was a fail
lizmat yeah, .grep and .first smart-match conceptually, but have short-cuts builtin for handling regexes and Callables directly for performance 09:45
CIAvash TBH, I don't know what your goal is, or what you consider working or not working 😀
Nemokosch that took a long time to acknowledge 😅 09:46
lizmat is just awake :-) and only backlogged a few lines 09:47
Nahita oh, why does `(:f)` work? 09:48
Nemokosch because that's not a named argument anymore, thank heavens
CIAvash I was just trying to explain why things behaved the way they did
Nahita that's good to know, better than "f" => True
Nemokosch If you remember the right presentation, this is why f(something) and f (something) isn't the same
f (something) would be the same as f((something)) 09:50
CIAvash: "If a pair like :f is smartmatched, Pair's ACCEPTS method calls method f on the topic." - this was insightful indeed 09:52
But not gonna lie, it seems to me that you were also surprised by the discussed output, possibly more surprised than me 😅
talking about these things always helps, though 09:55
eventually, I came up with the right conclusion that :f might have got eaten up as a named argument 09:56
but I probably wouldn't have thought about it in a meaningful way if we don't talk about it
10:47 frost left, frost joined 12:56 frost left 14:22 razetime joined 15:27 razetime left 15:38 razetime joined 16:15 razetime left 17:22 deadmarshal left 17:23 dakkar left 17:44 deadmarshal joined 18:20 Kaiepi left 20:07 Kaiepi joined 20:12 deoac joined
deoac When I try to compile the following line 20:25
```
[0] > our Int $foo
```
I get this error:
```
===SORRY!=== Error while compiling:
Cannot put a type constraint on an 'our'-scoped variable
at line 2
------> <BOL>⏏<EOL>
    expecting any of:
        constraint 20:26
```
Why can't 'our'-scoped variables be typed?
If I have 'enum Color <red green blue>', is there a way to loop thru members of the enum? 21:08
Nemokosch I think enums have the interface of a Hash 21:10
m: enum Color <red green blue>; dd Color.keys;
yep, `("green", "red", "blue").Seq` 21:11
lizmat m: enum Color <red green blue>; dd $_ for Color.pairs 21:55
camelia :red(0)
:blue(2)
:green(1)
lizmat m: enum Color <red green blue>; dd $_ for Color.pairs.sort(*.value)
camelia :red(0)
:green(1)
:blue(2)
23:29 MasterDuke joined