|
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. |
|||
| masukomi | re our discussion about prefixing imported methods, and how it looked like lizmat's "from" module could prolly be hacked to do it. I looked at it but it was beyond my newb abilities, so i asked liz | 00:53 | |
| > I’m thinking something like | |||
| > use from "Foo" prefix => ‘f’ | |||
| > And then Foo::bar-method becomes callable as f-bar-method. | |||
| > (+ current functionality of specifying methods to import) | |||
| > Is that possible? | |||
| and she said | |||
| > A named argument in a "use" statement, is currently interpreted by the system as an indicator for EXPORT::DEFAULT namespace. So you would have to specify it as a positional Pair, so | |||
| > "prefix" => "f" | |||
| > rather than | |||
| > prefix => "f" | |||
| > But yeah, you could look at any semantics you'd want. | |||
| so ... yeah. Maybe <@724421839924756480> would be interested in tackling that. I would, but I don't understand enough ... yet. 😉 | |||
| guifa_ | masukomi: editing that would be pretty easy | 01:12 | |
| The from module is just a about a dozen lines of code | |||
| github.com/lizmat/from/blob/97a7c0...akumod#L12 <-- for instance, this just passes through a Map. It would be fairly trivial to to modify it to prefix the keys | 01:15 | ||
| Basically (untested) Map.new: ("use $distro; MY::<@exports[]>:p".EVAL).map({Pair.new: $prefix ~ .key, .value}) | 01:18 | ||
| The main question is how you'd want to pass in the prefix (perhaps `use prefix-from <Module::Name prefix-value- symbolA symbolB symbolC>`) | 01:20 | ||
| Doing it that way just changes the EXPORT sub to `sub EXPORT($distro, $prefix, *@exports is copy) { … }` | 01:44 | ||
|
01:56
frost joined
03:30
Kaiepi left
03:31
Kaiepi joined
05:05
Oshawott left
|
|||
| yabobay | can hashes have Int indices? | 07:02 | |
|
07:54
razetime joined
08:33
m_athias left
08:35
m_athias joined
08:43
discord-raku-bot left,
discord-raku-bot joined
09:00
frost left
09:03
frost joined
|
|||
| guifa_ | yes, but you need to declare them slightly differently, otherwise upon assingmnent they'll be autocoerced into Str | 09:33 | |
| m: my Str %foo{Int}; %foo{5} = 'a'; say %foo.keys.head.WHAT | 09:35 | ||
| camelia | (Int) | ||
| guifa_ | For scalared vars: | 09:37 | |
| m: my Hash[Str,Int] $foo .= new; $foo{5} = 'a'; say $foo.keys.head.WHAT; | |||
| camelia | (Int) | ||
|
09:59
razetime left
10:00
razetime joined
|
|||
| yabobay | i got confused before cause i was doing %foo<$_> which is completely the wrong thing | 11:03 | |
| i didn't read about the angle brackets yet so that was my fault | |||
| Nemokosch | `%foo<<$_>>` could work if `$_` is a string, I think | 11:11 | |
| but yeah, `%foo{$_}` is better | |||
| yabobay | what does %foo<<$_>> mean? | 11:17 | |
| Nemokosch | << is word quoting with variable interpolation | 11:19 | |
| so it's kinda like %foo{"$_"} in this case | 11:20 | ||
| yabobay | can i have ranges that are descending? | 12:03 | |
| m: say $_ for 10 .. 0 | |||
| whyyy | |||
| Nemokosch | There are multiple ways | 12:04 | |
| the simplest would be to just use the sequence operator instead of the range operator | 12:05 | ||
| m: .say for 10 ... 0 | |||
| yabobay | what's the difference with that? | ||
| Nemokosch | a range is a different type to begin with | ||
| yabobay | a sequence is what? | ||
| Nemokosch | "An iterable, potentially lazy sequence of values" according to the docs | 12:07 | |
| yabobay | huh | ||
| isn't that what a range is | |||
| Nemokosch | absolutely not | ||
| yabobay | a range is supposed to superficially look like a sequence? | 12:08 | |
| Nemokosch | "Interval of ordered values" | ||
| yabobay | ohhh | ||
| so a sequence can be whatever | |||
| but a range has to be ordered | 12:09 | ||
| Nemokosch | it has a step of "one" | ||
| > Iterating a range (or calling the list method) uses the same semantics as the ++ prefix and postfix operators, i.e., it calls the succ method on the start point, and then the generated elements. | |||
| yabobay | i think i get it | 12:11 | |
| why not just use a sequence for the same things? | |||
| why have ranges exist | |||
| Nemokosch | I suppose because 1) ranges have a common and well-defined purpose 2) they can be effectively checked for with smartmatch | 12:13 | |
|
12:43
discord-raku-bot left,
discord-raku-bot joined
|
|||
| Kaiepi | sequences are pretty dynamic compared to a range. a range is able to smartmatch and behave as a full-blown `Positional` given its bounds alone | 13:24 | |
| what you write after `...` is not the end of the sequence, but a condition to terminate the sequence on. it doesn't know the end until the entire thing is computed | 13:26 | ||
| m:``` | |||
| say 1...(10 but role { method ACCEPTS(Mu \x) { dd x; callsame } }) | |||
| ``` | |||
| yabobay | so sequences cannot be lazy | 13:27 | |
| Kaiepi | they can be | ||
| is `&dd` stderr? | 13:28 | ||
| m:``` | 13:29 | ||
| say 1...(10 but role { method ACCEPTS(Mu \x) { say x; callsame } }) # should have correct order | |||
| ``` | |||
| `&say` wants the entire list, so it's reified eagerly here | 13:30 | ||
|
13:31
frost left
|
|||
| yabobay | i dont even know what any of that is | 13:32 | |
| the fact there;s a but keyword is kinda funny | |||
| Kaiepi | `ACCEPTS` is the method backing a smartmatch. starting a sequence with a number will try to increment until that terminating smartmatch succeeds. i'm trying to show how it goes about calculating its elements | 13:36 | |
| `but` is a runtime mixin. `ACCEPTS` is being overridden on `10` | 13:38 | ||
| `but` makes a runtime mixin. `ACCEPTS` is being overridden on `10` | |||
|
14:24
jgaz joined
15:04
razetime left
20:56
jgaz left
|
|||
| Nemokosch | Can I do something like... a parameter that can be a Map or a List, in case of a List, it should be turned into a Map using .pairs semantics? | 20:59 | |
| I mean eventually I can but with some type annotation magic | 21:01 | ||
| gfldex | <@297037173541175296> ^^^ | 22:03 | |
| m:``` | |||
| multi foo(Map $wanna) { | |||
| say „got $wanna“; | |||
| } | |||
| multi foo(*@okish) { | |||
| foo @okish.pairs.Map; | |||
| } | |||
| foo 1,2,3,4; | |||
| ``` | |||
| Nemokosch | the annoying thing is that it's really one argument out of 4 | 22:22 | |
|
23:50
discord-raku-bot left,
discord-raku-bot joined
|
|||