This channel is intended for people just starting with the Raku Programming Language ( Logs are available at
Set by lizmat on 8 June 2022.
01:44 deoac joined
deoac What's the advantage to using samewith() instead of the name of the multi sub? 01:46
MasterDuke that's a good question. i believe samewith() bypasses multi-dispatch. so if you just call the sub again with new arguments, you could end up in a new multi, but samewith (i believe) will call the exact multi it's in 01:49
obviously you may or may not want that. but samewith gives you the option 01:50
well. ^^^ sounded good. but... 01:54
m: multi sub a(Int $b) { say "got Int $b" }; multi sub a(Str $c) { say "Str $c"; return if $c eq 2; samewith($c.Int) }; a(2); a("2.2")
camelia got Int 2
Str 2.2
got Int 2
deoac I don't understand "you could end up in a new multi".  Could you please give me an example? 01:58
MasterDuke well, what i ran just did. samewith in the Str multi ended up calling the Int multi 01:59
i thought it would end up calling the Str multi again and failing because of the wrong type 02:00
oh, but samewith would allow you to use anonymous recursive multis more easily 02:03
deoac How can you have anonymous multi-dispatch? 02:06
MasterDuke hm. the 'multi' there was a but too much 02:08
m: sub (Int $a) { say "Int $a"; return if $a < 1; samewith($a - 1) }(3) 02:09
camelia Int 3
Int 2
Int 1
Int 0
MasterDuke m: sub (Int $a) { say "Int $a"; return if $a < 1; &?BLOCK($a - 1) }(3) 02:10
camelia Int 3
Int 2
Int 1
Int 0
MasterDuke m: sub (Int $a) { say "Int $a"; return if $a < 1; &?ROUTINE($a - 1) }(3)
camelia Int 3
Int 2
Int 1
Int 0
deoac Ah, I see now!  Thank you. 02:12
MasterDuke np 02:16
02:22 deoac left 07:39 ab5tract left 07:54 dakkar joined 07:56 Manifest0 joined 08:23 teatwo joined 08:24 teatwo left, teatwo joined 08:25 teatwo left 08:26 teatwo joined, tea3po left
lizmat fwiw, I think samewith was a mistake (and mine) 08:41
nemokosch There are some other languages that support recursion without typing the function name 08:55
If really all it does is to trigger a new call for the same function or method, it shouldn't be too bad, right? 08:56
lizmat It's slightly more involved than that 08:58
e.g. in the case of a method, it will need to obtain the invocant
nemokosch That makes sense anyway 08:59
What I can offer for comfort (actually, probably rather discomfort), is an actual hard mistake instead 09:00
The multi resolution rules are not transparent
Last time I was messing around in the core to fix that Range bug, at first I managed to rearrange the order of two candidates I didn't even modify 09:02
This should probably never happen for starters but to make it worse, I found nothing about the rules
10:32 ab5tract joined 11:34 teatwo left 11:35 teatime joined 12:55 jgaz left 12:56 jgaz joined 16:34 dakkar left 20:57 ab5tract left 20:58 ab5tract joined 22:33 Util left 22:35 Util joined 23:24 Manifest0 left 23:37 teatime left 23:38 teatime joined 23:52 teatwo joined 23:55 teatime left