gpt4 book ai didi

raku - 在Perl 6中的方法和函数调用中使用冒号

转载 作者:行者123 更新时间:2023-12-04 13:13:15 26 4
gpt4 key购买 nike

我想知道冒号与Perl 6中的方法和函数调用有什么关系。
作为记录,我使用的是基于MoarVM版本2015.05构建的perl6版本2015.05-55-gd84bbbc。

我刚刚在Perl6 spec test (S32-io)中看到了以下内容(我添加了评论):

$fh.print: "0123456789A";   # prints '0123456789A' to the file

据我所知,这等效于:
$fh.print("0123456789A");   # prints '0123456789A' to the file

这两个似乎都带有多个参数,并且可以使列表变平:
$fh.print: "012", "345", "6789A";   # prints '0123456789A' to the file
$fh.print("012", "345", "6789A"); # prints '0123456789A' to the file

my @a = <012 345 6789A>;

$fh.print(@a); # prints '0123456789A' to the file
$fh.print: @a; # prints '0123456789A' to the file

使用这两种不同的语法必须有一定的理由。是否有任何理由使用一种或另一种语法?

我还注意到,当用作方法时,必须在打印时使用 :():
$fh.print(@a);   # Works
$fh.print: @a; # Works!
$fh.print @a; # ERROR!

将冒号与 print函数一起使用时,还有一些有趣的行为。在这种情况下, :()不等效:
print @a;  # Prints '0123456789A' (no newline, just like Perl 5)
print(@a); # Ditto
print: @a; # Prints '012 345 6789A' followed by a newline (at least in REPL)

print @a, @a; # Error (Two terms in a row)
print: @a, @a; # Prints '012 345 6789A 012 345 6789A' followed by a newline (in REPL)

然后,我尝试在脚本文件中使用打印。这适用于打印到标准输出:
print @a;

但是,这不会打印到标准输出:
print: @a, @a;

但是方法版本可以正常工作:
$fh.print: @a, @a; # Prints '0123456789A0123456789A' to the file

我觉得我几乎理解了这一点,但是我无法用语言表达出来。有人可以解释使用打印品的这些种类。此外,由于“大型列表重构”,这些行为是否会改变?

最佳答案

使用冒号而不是括号的主要原因之一是,它可以通过删除一组括号来帮助整理代码。否则,它们是完全相同的。

当您有了print: @a时,您真正要做的就是在行上贴上标签,然后让@a掉线。 REPL中的哪个将使用该值调用say

如果您在方法调用中不使用括号或冒号,则该方法将不带任何参数被调用。

您可以交换方法的顺序,如果使用冒号,则可以交换请求者的顺序。

say $*ERR: 'hello world'; # $*ERR.say('hello world')

关于raku - 在Perl 6中的方法和函数调用中使用冒号,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30982697/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com