š¦ Welcome to the MAIN() IRC channel of the Raku Programming Language (raku.org). Log available at irclogs.raku.org/raku/live.html . If you're a beginner, you can also check out the #raku-beginner channel! Set by lizmat on 6 September 2022. |
|||
01:21
explorer left
|
|||
nemokosch | Not 5? š | 01:49 | |
02:27
hulk joined
02:28
kylese left
03:15
hulk left,
kylese joined
03:36
jpn joined
03:41
jpn left
04:30
kjp left
04:35
kjp joined
|
|||
guest912 | Iām getting really confused how Nil works in Raku | 07:39 | |
First I build a data structure with some optional values as āSomeType:D | Nilā and when I set it to Nil later itās somehow transforms to something else of āAnyā type. | |||
It fails to type check and ā* ~~ Nilā returns False. But ā(* // Nil) ~~ Nilā returns True | 07:40 | ||
I have no idea whatās going on, does anyone have any clue? | |||
Iām thinking of defining a new type like āsubset NilIsh where !.definedā in order to avoid this issue | 07:42 | ||
Can āNilās somehow change when you apply .Hash method for example to a list of pairs? | 07:43 | ||
07:46
abraxxa-home joined
|
|||
kjp | guest912: Not a complete answer to your questions, but when you assign Nil to a container, the default value of that container is stored instead. Ferquently that default value will be (Any). | 07:57 | |
m: my $a is default(42); $a = 23; say $a; $a = Nil; say $a; | |||
camelia | 23 42 |
||
kjp | m: my Int $a = 42; say $a; $a = Nil; say $a; | 07:58 | |
camelia | 42 (Int) |
||
07:58
abraxxa-home left
|
|||
kjp | Note the default type there is {Int} since the variable is so defined. | 07:58 | |
* (Int) | |||
More details at docs.raku.org/type/Nil | 08:00 | ||
guest912 | Okay, that clears things up. The question though is what is the best way to explicitly type optional values? | 08:06 | |
08:09
hvxgr joined
08:10
hvxgr left
08:16
abraxxa-home joined
|
|||
kjp | Sorry -- I'm going to have to leave that to you. | 08:22 | |
08:22
hvxgr joined
09:20
hvxgr left
09:26
jpn joined
09:31
hvxgr joined,
abraxxa-home left
|
|||
gfldex | m: my Any:D $foo = Nil; | 09:39 | |
camelia | Type check failed in assignment to $foo; expected Any:D but got Any (Any) (perhaps Nil was assigned to a :D which had no default?) in block <unit> at <tmp> line 1 |
||
gfldex | guest912: ^^^ | ||
guest912 | m: my Str $foo = Nil; $foo.raku.say; ($foo ~~ Nil).raku.say; | 09:55 | |
camelia | Str Bool::False |
||
guest912 | m: subset OptionalStr where * ~~ Nil | Str:D; my OptionalStr $str = Nil; ($str ~~ Nil).raku.say; | 09:56 | |
camelia | Bool::False | ||
guest912 | This is really confusing. | 09:57 | |
How do I refer to a method by reference? Without calling the method but taking it as a value? | 10:22 | ||
āfoo.some-methodā would already call āsome-methodā | 10:23 | ||
:m my Str:D $foo="test"; ($foo.^find_method("chars") ~~ Callable).say | 10:25 | ||
m: my Str:D $foo="test"; ($foo.^find_method("chars") ~~ Callable).say | |||
camelia | True | ||
guest912 | Would this be the right solution? | ||
kjp | Well the name of the method is something like &class::method | 10:29 | |
10:30
sena_kun joined
|
|||
gfldex | m: my $name = 'grep'; my @a = lines; @a."$name"('the' ~~ *).say; | 10:36 | |
camelia | () | ||
gfldex | m: lines.say; | 10:37 | |
camelia | (Ā»Wann treffen wir drei wieder zusamm?Ā« Ā»Um die siebente Stundā, am BrĆ¼ckendamm.Ā« Ā»Am Mittelpfeiler.Ā« Ā»Ich lƶsche die Flamm.Ā« Ā»Ich mitĀ« Ā»Ich komme vom Norden her.Ā« Ā»Und ich vom SĆ¼den.Ā« Ā»ā¦ | ||
gfldex | m: my $name = 'grep'; my @a = lines; @a."$name"('die' ~~ *).say; | ||
camelia | () | ||
gfldex | m: my $name = 'grep'; my @a = lines; @a."$name"(*.contains('die')).say; | ||
camelia | ( Ā»Um die siebente Stundā, am BrĆ¼ckendamm.Ā« Ā»Ich lƶsche die Flamm.Ā« Und die BrĆ¼cke muĆ in den Grund hinein.Ā« Ā»Und der Zug, der in die BrĆ¼cke tritt Um die siebente Stundā?Ā« Und die BrĆ¼cknersleutā ohne Rast und ā¦ | ||
gfldex | guest912: You just quote the method-name. | 10:38 | |
guest912 | :m my Str:D $foo="test"; ($foo."chars" ~~ Callable).say | 10:40 | |
m: my Str:D $foo="test"; ($foo."chars" ~~ Callable).say | |||
camelia | ===SORRY!=== Error while compiling <tmp> Quoted method name requires parenthesized arguments. If you meant to concatenate two strings, use '~'. at <tmp>:1 ------> my Str:D $foo="test"; ($foo."chars"ā ~~ Callable).say |
||
guest912 | gfldex, it seems like just a way to call the method with undetermined name. But I donāt want to call it. | 10:41 | |
I want to take is as a value. | |||
Like a first-class-citizen thing | |||
gfldex | Then you have to use the MOP. .^can works for most cases. | ||
Please note that you make your program very fragile indeed if you do so. | 10:42 | ||
10:43
jpn left
10:51
lizmat_ joined
10:52
lizmat_ left,
lizmat_ joined
10:54
lizmat left
10:56
jpn joined
11:24
lizmat_ left
11:25
lizmat joined
11:40
jpn left
11:41
jpn joined
11:47
jpn left
11:49
jpn joined
11:54
jpn left
12:20
jpn joined
12:25
jpn left
12:33
Sgeo left
|
|||
nemokosch | "Sad but true" | 12:35 | |
lizmat | why is that sad? | ||
nemokosch | Nil is indeed very confusing and it is rather disappointing that there is no proper way to retrieve a method as data | 12:36 | |
lizmat | m: dd 42.^find_method("Str") | ||
camelia | Mu Str = proto method Str (Mu: |) {*} | ||
lizmat | m: dd 42.^find_method("Str")(42) | 12:37 | |
camelia | "42" | ||
lizmat | m: dd 42.^find_method("Str")(42, :superscript) | ||
camelia | "ā“Ā²" | ||
nemokosch | Theses are poorly standardized metamodel solutions | ||
Basically it takes the same effort to retrieve a method and define a class on the fly | 12:38 | ||
lizmat | that method is documented as many others docs.raku.org/type/Metamodel/Defin...ind_method | 12:40 | |
so I don't get the "poorly" | 12:41 | ||
or do you think it's poorly because it uses snake-case ? | |||
nemokosch | It's "documented" but even the documentation says that the metamodel is Rakudo-specific and shouldn't be counted on | 12:44 | |
lizmat | "Warning: this class is part of the Rakudo implementation, and is not a part of the language specification." | 12:45 | |
so where does it say it cannot be counted on *in Rakudo* ? | |||
nemokosch | Why moving the goal posts? | 12:48 | |
Nobody added "in Rakudo" | |||
lizmat | *you* added "and shouldn't be counted on" | 12:49 | |
my point is that you *can* count on them, in Rakudo | |||
nemokosch | But "in general" you can't | 12:50 | |
Anyway, people keep stomping on these things | 12:52 | ||
12:59
jpn joined
13:02
melezhik joined
|
|||
melezhik | . | 13:03 | |
13:04
jpn left
|
|||
melezhik | .tell tonyo: I've my comment on your grant proposal | 13:04 | |
tellable6 | melezhik, I'll pass your message to tonyo | ||
13:05
melezhik left
13:06
melezhik joined
13:07
melezhik left
|
|||
nemokosch | By the way, come to think of it, there is a banal high-level solution | 13:13 | |
my &stored-method = -> |args { $object.my-method(args) } | 13:14 | ||
lizmat | and where does $object come from? | 13:16 | |
my &stored-method = -> $invocant, |args { $invocant.my-method(args) } | |||
feels more correct? | |||
also: that does add another indirection, whereas .^find_method does not | 13:17 | ||
afk& | 13:18 | ||
guest912 | lizmat, the point is that itās not part of the language or standard env. Itās environment-specific thing. | 13:30 | |
Just by using it in your code your are immediately glueing it to particular Raku implementation. | 13:32 | ||
-- | 13:33 | ||
I have a couple of āmulti sub MAIN('foo')ās, and āUSAGEā. I consider this a bug that if you type jibberish as your subcommand it succeeds | |||
I can call my script like ā./foo.raku absolute-nonsenseā, itāll print USAGE but the exit code is 0 | 13:34 | ||
13:39
jpn joined
13:57
jpn left
14:02
jpn joined
14:07
jpn left
14:10
jpn joined
14:16
jpn left
|
|||
[Coke] | instead of trying to make a type that is optional, i'd mark the parameter tiself as optional with ? | 14:16 | |
14:20
jpn joined
14:26
guest912 left
14:28
jpn left
14:37
guest912 joined
14:50
jpn joined
|
|||
lizmat | guest912: that may be worth an issue | 15:07 | |
15:17
perlbot left
15:18
simcop2387 left
|
|||
ugexe | well according to github.com/rakudo/rakudo/commit/fb...42d8d427d5 USAGE is apparently deprecated | 15:33 | |
also something about a GENERATE-USAGE that doesn't seem to work | 15:34 | ||
ah, i was defining it `sub GENERATE-USAGE {}` but it needs some arguments passed to it | 15:36 | ||
15:38
hvxgr left
15:40
hvxgr joined
15:45
Guest59 joined
15:51
Guest59 left
16:30
simcop2387 joined
16:31
perlbot joined
17:22
dutchie left
18:06
dutchie joined
19:37
shmurpins joined
19:39
shmurpins left
20:25
jpn left
20:31
guest912 left
20:32
guest912 joined
20:35
epony left
20:38
bartolin left,
epony joined,
bartolin joined
21:35
jpn joined,
merp left
21:41
merp joined
21:55
samebchase left
22:01
jjido joined
22:04
snonux left
22:05
snonux joined
22:25
jpn left
22:37
sena_kun left
22:38
sena_kun joined
22:41
Sgeo joined,
sena_kun left
22:42
sena_kun joined
22:50
sena_kun left
22:51
sena_kun joined
23:24
jjido left
23:30
sena_kun left
|