昨天,我们查看了返回字符串的 Bool 类的两个方法。函数产生的字符串表示在源代码中被硬编码。
让我们使用这个观察并尝试改变文本。
所以,这里是我们要修改的片段:
Bool.^add_multi_method('gist', my multi method gist(Bool:D:) {
self ?? 'True' !! 'False'
});
该 gist
方法用于对已定义的变量进行字符串化。
要做到这一点,你需要在计算机上安装 Rakudo 的源代码,以便编译它们。首先从 GitHub 克隆项目:
$ git clone https://github.com/rakudo/rakudo.git
编译 MoarVM:
$ cd rakudo
$ perl Configure.pl --gen-moar --gen-nqp --backends=moar
$ make
完成之后,你会在 rakudo
目录下获得 raku
可执行文件。
现在,打开 src/core/Bool.pm
文件,并将 gist
方法的字符串更改为使用 Unicode 大拇指代替纯文本:
Bool.^add_multi_method('gist', my multi method gist(Bool:D:) {
self ?? '👍' !! '👎'
});
保存文件后,您需要重新编译 Rakudo。 Bool.pm 位于要在 Makefile 中编译的文件列表中:
M_CORE_SOURCES = \
src/core/core_prologue.pm\
src/core/traits.pm\
src/core/Positional.pm\
. . .
src/core/Bool.pm\
. . .
运行 make
并获取更新的 raku
。运行它并享受结果:
:~/rakudo$ ./raku
To exit type 'exit' or '^D'
> my Bool $b = True;
👍
> $b = !$b;
👎
>
作为练习,让我们通过添加未定义值的 gist
方法来改进本地 Raku。默认情况下,它不存在,我们昨天看到了。这意味着尝试在字符串中插入未定义的变量将被拒绝。让我们做得更好。
插值使用 Str
方法。它与 gist
和 perl
类似,所以在创建新版本时不会遇到任何困难。
这是目前在 Raku 中的内容:
Bool.^add_multi_method('Str', my multi method Str(Bool:D:) {
self ?? 'True' !! 'False'
});
这是你需要添加的内容:
Bool.^add_multi_method('Str', my multi method Str(Bool:U:) {
'¯\_(ツ)_/¯'
});
请注意,第二个变体中不需要 self
(不能使用)。
编译并运行 raku
:
$ ./raku
To exit type 'exit' or '^D'
> my Bool $b;
(Bool)
> "Here is my variable: $b"
Here is my variable: ¯\_(ツ)_/¯
>
它按预期工作。恭喜,你刚刚改变了 Raku 的行为!