【问题标题】:How do I `say` and `print` into a buffer?我如何“说”和“打印”到缓冲区中?
【发布时间】:2015-10-26 16:18:16
【问题描述】:

在 Perl 6 中,Str 类型是不可变的,因此使用可变缓冲区而不是连接大量字符串似乎是合理的。接下来,无论我的函数是写入标准输出、文件还是内存缓冲区,我都喜欢能够使用相同的 API。

在 Perl 中,我可以像这样创建内存中的文件

my $var = "";
open my $fh, '>', \$var;
print $fh "asdf";
close $fh;
print $var;          # asdf

如何在 Perl 6 中实现相同的功能?

【问题讨论】:

标签: io raku rakudo


【解决方案1】:

ecosystem 中有一个最小的IO::String,由数组支持。

对于一次性解决方案,您还可以执行类似的操作

my $string;
my $handle = IO::Handle.new but role {
    method print(*@stuff) { $string ~= @stuff.join };
    method print-nl       { $string ~= "\n" }
};

$handle.say("The answer you're looking for is 42.");
dd $string;

【讨论】:

    【解决方案2】:

    我目前所做的是将字符串连接包装在一个类中作为临时解决方案。

    class Buffer {
        has $!buf = "";
        multi method print($string) {
            $!buf ~= $string;
        }
        multi method say($string) {
            $!buf ~= $string ~ "\n";
        }
        multi method Str() {
            return $!buf;
        }
    }
    

    这样我就可以了

    my $buf = Buffer.new();
    say $buf: "asdf";
    print $buf.Str;
    

    【讨论】:

      猜你喜欢
      • 2019-05-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-11-21
      相关资源
      最近更新 更多