|
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
|
|||