stevied I tried that. But no whay to get the month name "January" from that 01:14
this is what I'm looking for: raku.land/cpan:JFORGET/Date::Calendar::Strftime 01:16
I'm stumped again. Got this: 06:32
```
#! /usr/bin/env raku
use v6;
class Vimwiki::File is IO::Path {
06:32 discord-raku-bot left, discord-raku-bot joined 06:37 discord-raku-bot left, discord-raku-bot joined 08:36 m_athias left, m_athias joined 09:05 dakkar joined
Nemokosch Because you set a different variable, I guess 09:18
Hm, or that nextwith overrides the value, not sure what it even does 09:24
gfldex `self.bless` returns a new `self` that `nextwith` doesn't know about. 10:40
Subclassing `IO::Path` may have surprising results.
lizmat I think IO::Path is not really subclassable at the moment... 10:43
that may warrant a Rakudo issue
gfldex A `subset` might do. 10:48
11:39 frost joined 12:14 frost left
lizmat and yet another Rakudo Weekly News hits the Net: rakudoweekly.blog/2022/01/31/2022-05-foo-is-42/ 13:06
13:34 A26F64 joined 13:55 discord-raku-bot left 13:56 discord-raku-bot joined 14:31 ychaouche joined
ychaouche hello 14:31
I am trying to learn about raku, coming from python, I am reading python to raku (docs.raku.org/language/py-nutshell) 14:32
I am intrigued by the "\" sigill (is it a sigill). It says : Sigilless variables, declared with a \ but used without them, are bound to the value they are assigned to and are thus immutable.
Are they like constants ?
the kind of variable you write in all caps in C for example ? 14:33
well, not variable, constant
lizmat they are bound: if they are bound to a scalar container, they can be changed 14:34
m: my \foo = 42; foo = 666
camelia Cannot modify an immutable Int (42)
in block <unit> at <tmp> line 1
lizmat m: my \foo = my $ = 42; foo = 666; say foo 14:35
camelia 666
lizmat the "my $" is a nameless variable with a container
ychaouche so in the second example you bound foo to a scalar variable, which let you change its content ? 14:37
scalar unnamed variable
lizmat yup 14:40
ychaouche ok thanks mate 14:41
lizmat opensource.com/article/18/8/containers-perl-6 # the article predates the rename, but the content is still correct otherwise
ychaouche maybe I shouldn't read that article, as I was not a perl developer myself 14:43
I'm afraid to get confused
gfldex The confusion is not Perl specific. 14:44
:->
lizmat ychaouche: the concept of binding and containers is important to get right in your mind when using Raku 14:45
ychaouche gfldex: it is article specific. it is comparing perl5 and perl6, I fear of getting lost when learning both languages
gfldex: better stick with raku
lizmat ychaouche++ 14:46
:-)
gfldex this might help then: docs.raku.org/language/containers
lizmat gfldex++
ychaouche thanks gfldex, it seems easy enough to read for beginners 14:47
not too long and paragraph headers do not introduce too many new concepts
gfldex Well, I'm not really happy with any of the docs we have. They don't state why we need binding to raw "things" and that can be quite important to understand what is really going on. 14:48
ychaouche oh, by the way, are lists a data type in raku or is still an internal structure not really meant to be used by the developer ?
gfldex Unless you do fancy stuff, just stick to sigiled variables.
lizmat ychaouche: lists are first class citizens in Raku 14:49
however, their contents *can* be mutable if elements are bound to a container
ychaouche "For a deeper discussion of the various kinds of ordered containers in Raku, see the overview of lists, sequences, and arrays; for unordered containers, see sets, bags, and mixes" 15:08
are raku "containers" what other languages may call "collections" ? 15:09
a data structure where you can put more than one value 15:10
hum, no 15:11
even single value data is a container (scalar) 15:12
can't understand this yet : f() = 42; 15:17
lizmat that function f() returns a container 15:18
m: sub foo() is raw { my $ }; foo() = 42
camelia ( no output )
lizmat m: my $bar; sub foo() is raw { $bar }; foo() = 42; say $bar 15:19
camelia 42
lizmat the "is raw" on the sub makes sure it doesn't de-containerize (which is the default)
ychaouche is "is rw" the same as "is raw" ? 15:20
lizmat m: my $bar; sub foo() is rw { $bar }; foo() = 42; say $bar 15:21
camelia 42
lizmat in this context, yes
ychaouche oh...
so they're really different things 15:22
I was making sure it's not syntactic sugar
otherwise rw is like read/write ?
lizmat m: sub foo($a is rw) { dd }; foo 42 # another context for "is rw"
camelia Parameter '$a' expects a writable container (variable) as an argument,
but got '42' (Int) as a value without a container.
in sub foo at <tmp> line 1
in block <unit> at <tmp> line 1
lizmat m: sub foo($a is rw) { dd }; my $b = 42; foo $b 15:23
camelia sub foo($a is rw)
lizmat (a bare dd just shows the sub / method with signature it is called in
)
m: sub foo($a is raw) { dd }; foo 42 # with "is raw" it will just bind to the constant 15:24
camelia sub foo($a is raw)
ychaouche "In order to mutate attributes in Raku, you must use the is rw trait on the attributes:" 15:42
so, by default, all attributes are immutable ? 15:43
lizmat public attributes are set at object creation time by default, and then immutable from the outside
a class may change any attribute using the private attribute syntax
m: class A { has $!a; method foo() { $!a = 42 }; method bar() { $!a } }; my $a = A.new; say $a.bar; $a.foo; say $a.bar 15:44
camelia (Any)
42
ychaouche so the "!" is for private ? 15:47
lizmat yeah, ! used as a twigil means private 15:50
. used as a twigil means public 15:51
ychaouche are twigils mandatory or can you have "has $attribute" ? 15:53
lizmat you actually can, but there's talk of having that form deprecated 15:55
so better not learn that now :-)
ychaouche ok 15:58
is andrew shittov around ?
lizmat andrew usually doesn't hang out on IRC 15:59
ychaouche ok
just found his course on a bing search
lizmat but he hangs out on Twitter: @andrewshitov
ychaouche nice to know, thanks 16:00
thanks all of you 16:07
maybe next time
16:07 ychaouche left
stevied OK, thanks for feedback on subclassing IO::Path 16:20
I tried a million different things to try to subclass it properly. None of them worked. 16:21
I found a module that did do it but it used some nqp to pull it off using a function called `augment` 16:22
lizmat yeah... augment is not a good idea generally :-( 16:23
stevied github.com/labster/p6-IO-Path-More...th/More.pm 16:24
according to docs, you can't give the object attributes when augmented
stackoverflow.com/questions/709199...-as-iopath 16:29
raiph said to avoid trying to subclass it and use an attribute to delegate to IO::Path
how so I submit a rakudo issue? 16:31
lizmat github.com/rakudo/rakudo/issues/new 16:46
17:03 A26F64 left
stevied ok,, thanks. writing something u 17:14
17:36 dakkar left