在 Mu 中§

有关方法 say的详细信息,请参阅主要文档 in context

multi method say()

say标准输出

say 42;                 # OUTPUT: «42␤»

因此,say 实际执行的操作被推迟到实际子类。在 大多数情况下,它对对象调用 .gist,返回一个紧凑的字符串表示形式。

在非接收器上下文中,say 将始终返回 True

say (1,[1,2],"foo",Mu).map: so *.say ;
# OUTPUT: «1␤[1 2]␤foo␤(Mu)␤(True True True True)␤»

但是,这种行为只是惯例,你不应该信任它来编写你的代码。然而,它有助于解释某些行为。

say 首先在 *.say 中打印,但最外层的 say 正在打印 so 操作返回的 True 值。

在 Proc::Async 中§

有关方法 say的详细信息,请参阅主要文档 in context

method say(Proc::Async:D: $output:$scheduler = $*SCHEDULER)

$output 调用方法 gist,添加一个换行符,将其编码为 UTF-8,并将其发送到外部程序的标准输入流,并将其编码为 UTF-8。

返回一个 Promise,一旦数据完全进入外部程序的输入缓冲区,该 Promise 就会被保留。

必须为写入创建 Proc::Async 对象(使用 Proc::Async.new(:w, $path, @args))。否则,将抛出 X::Proc::Async::OpenForWriting 异常。

在调用方法 say 之前必须调用 start,否则将抛出 X::Proc::Async::MustBeStarted 异常。

在 IO::Handle 中§

有关方法 say的详细信息,请参阅主要文档 in context

multi method say(IO::Handle:D: **@text --> True)

此方法与 put 相同,只是它通过调用 .gist 而不是 .Str 来将参数字符串化。

当句柄 处于二进制模式 时尝试调用此方法将导致抛出 X::IO::BinaryMode 异常。

my $fh = open 'path/to/file':w;
$fh.say(Complex.new(34));        # OUTPUT: «3+4i␤» 
$fh.close;

在独立例程中§

有关子 say的详细信息,请参阅主要文档 in context

multi say(**@args --> True)

打印给定对象的“要点”;如果对象是 Str 的子类,它将始终调用 .gist。与 put 相同,但它使用 .gist 方法获取对象的字符串表示形式;与 put 的情况一样,它还将自动为 Junctions 进行线程处理。

注意:某些对象的 .gist 方法(例如 列表)仅返回有关对象的部分信息(因此称为“要点”)。如果您打算打印文本信息,则很可能需要改用 put

say Range;        # OUTPUT: «(Range)␤» 
say class Foo {}# OUTPUT: «(Foo)␤» 
say 'I ♥ Raku';   # OUTPUT: «I ♥ Raku␤» 
say 1..Inf;       # OUTPUT: «1..Inf␤»