01:27
Manifest0 left
01:52
MasterDuke joined
|
|||
scullucs | How do I go from $s = "abc\ndef\n" to | 02:54 | |
MasterDuke | scullucs: it appears some of your message got cut off here on irc, all i see is `How do I go from $s = "abc\ndef\n" to` | 02:59 | |
scullucs | Oh, this channe is bridged? Sorry. I thought I was on Discord side only. | 03:00 | |
Hang on, I'll rephrase anyway. | |||
lucs | Hi. | 03:02 | |
How do I obtain ['a', 'b', 'c', 'd'] given "ab\ncd\n". | |||
I keep tripping up with embedded Seq. | 03:03 | ||
MasterDuke | m: say "ab\ncd\n".lines.join.comb | 03:04 | |
camelia | (a b c d) | ||
MasterDuke | m: say "ab\ncd\n".comb.grep(* ne "\n") | 03:05 | |
camelia | (a b c d) | ||
MasterDuke | m: say "ab\ncd\n".comb(/\w/) | 03:06 | |
camelia | (a b c d) | ||
lucs | I get it. | 03:07 | |
MasterDuke | couple different options | ||
lucs | Thanks. | ||
MasterDuke | np | ||
lucs | I think my problem was coming from trying things like this: | 03:09 | |
m: my @a = < a b >; @a.push: 'de'.comb; say @a | 03:10 | ||
camelia | [a b (d e)] | ||
lucs | How do I flatten out that (d e) (Hmm... flatten...) | 03:11 | |
MasterDuke | m: my @a = < a b >; @a.append: "de".comb; say @a | 03:12 | |
camelia | [a b d e] | ||
lucs | Ah, append, thanks | 03:13 | |
MasterDuke | np | ||
03:34
camelia left
03:49
MasterDuke left
04:05
camelia joined
09:24
dakkar joined
09:52
Manifest0 joined
17:33
dakkar left
|
|||
yabobay | m: "4" + "1" | 20:36 | |
Raku eval | WARNINGS for /home/glot/main.raku: Useless use of "+" in expression "\"4\" + \"1\"" in sink context (line 1) | ||
yabobay | well that's not whati it does on my machine | ||
m: '4' + '1' | |||
Raku eval | WARNINGS for /home/glot/main.raku: Useless use of "+" in expression "'4' + '1'" in sink context (line 1) | ||
librasteve | m: "4"+"1" | 20:50 | |
say m: "4"+"1" | 20:51 | ||
m: say "4"+"1" | |||
m: say "4"+"1" | |||
Raku eval | 5 | ||
librasteve | phew | 20:52 | |
seems like the Discord <=> IRC bridge struggles with quotes ... so I think the recipe is vanilla m: and then put the actual code in backticks | 20:53 | ||
yabobay | oh ok well what i wanted to ask is if this is doable why do we need allomorphs again i asked this before but it still doesn't really make sense | ||
librasteve | raku has optional types - this code is untyped - a numeric operator like + will coerce its operand to numbers if that can be done - when you coerce a Str to a Real the string is reparsed if possible | 21:00 | |
m: say "4".WHAT; say "4".Real.WHAT; say (+"4").WHAT; | 21:02 | ||
Raku eval | (Str) (Int) (Int) | ||
librasteve | in raku (as in perl iirc) the + in +"4", like any numeric operator can be used as shorthand to do the coercion | 21:03 | |
--- | 21:04 | ||
the question arises when we want to add types (since Raku has optional types) | |||
21:05
whatsnew joined,
whatsnew left,
whatsnew joined
|
|||
yabobay | exactly. so if types get coerced, why are there IntStrs? | 21:06 | |
21:06
whatsnew left
|
|||
librasteve | m: `sub add(Int $a, Int $b) {$a+$b}; say add("4","1"); | 21:07 | |
Raku eval | Exit code: 1 ===SORRY!=== Error while compiling /home/glot/main.raku Bogus statement at /home/glot/main.raku:1 ------> <BOL>⏏`sub add(Int $a, Int $b) {$a+$b}; say ad expecting any of: prefix statement list term | ||
librasteve | m: sub add(Int $a, Int $b) {$a+$b}; say add("4","1"); | ||
Raku eval | Exit code: 1 ===SORRY!=== Error while compiling main.raku Calling add(Str, Str) will never work with declared signature (Int $a, Int $b) at main.raku:1 ------> sub add(Int $a, Int $b) {$a+$b}; say ⏏add("4","1"); | ||
librasteve | (oops got the backticks right the second time!) | 21:08 | |
yabobay | why do operators like + coerce values but function calls don't? | ||
ab5tract | m: sub add(Int() $a, Int() $b) { say $a+$b; say $a.WHAT, $b.WHAT}; add("4","1"); | 21:09 | |
camelia | 5 (Int)(Int) |
||
librasteve | hi ab5tract! good point, you can put coercers on the signature to solve this with the () parens after the type such as Int() | 21:10 | |
ab5tract | m: multi sub add(Int(Str) $a, Int(Str) $b) { say "coercing Str to Int"; dd :$a, :$b }; multi sub add(Int(Num) $a, Int(Num) $b) { say "coercing Num to Int"; dd :$a, :$b }; add("4","1"); add(4.4e0, 2.3e0) | 21:11 | |
camelia | coercing Str to Int :a(4) coercing Num to Int :b(1) :a(4) :b(2) |
||
librasteve | docs.raku.org/language/operators#infix_+ | 21:12 | |
yabobay | oh i see | ||
librasteve | ^^ the docs tell you that the operator coerces (just an fyi) - as to why - well raku when untyped behaves like I said above so that it is very similar to perl and very dynamic and flcexible for things like one liners | 21:13 | |
and ab5tract has also shown that you can restrict the type that is coerced - with stuff like Int(Str) - so Int() means I will take any type and coerce to Int and Int(Str) means I will only take Str and then try to coerce it to Int ... I suppose that I would call this gradual typing in that coercion is a great tool to shape your arguments into types that can be handled in strongly typed code | 21:16 | ||
ab5tract | librasteve++ | 21:18 | |
librasteve | @yabobay - as to your question about Allomorphs - I suggest you read this rakujourney.wordpress.com/2023/05/...lomorphia/ and this rakujourney.wordpress.com/2024/04/...s-unicode/ if you want your question answered deeply | 21:21 | |
yabobay | lol shameless plug | 21:25 | |
librasteve | there is a (valid) case that Allomorphs are less needed now that we have coercion types - personally I think that they can occasionally be quite useful, but they are not really needed for day to day raku | ||
other blogs are available XD | 21:26 | ||
23:31
rakufan1 joined
|
|||
tbrowder | howdy, non-thread but old raku user having thread issues. | 23:40 | |
i use two main class instances from David Warring's PDF modules that call instances from the C FreeFont2 library | 23:46 | ||
how can i protect or limit the number of instances used? | 23:48 |