这个循环还有哪些其他方法可以重写?

Ste*_*ieD 3 raku

得到这个简单的循环:

use Config::Simple:from<Perl5>;

my $cfg = Config::Simple.new(syntax => 'ini');


%config{'short_name'} = 'blah';
for %config.kv -> $k, $v {
    $cfg.param("%config{'short_name'}.$k", $v);
}
Run Code Online (Sandbox Code Playgroud)

工作正常。但我想更熟悉实现相同目标的其他方法,即使只是为了轻松地阅读其他人的代码。另外,循环似乎是“旧”学校的做事方式,而不是很“像 Raku”,我需要更舒适地以更高级的方式使用函数。

不管怎样,为了伸展我的新 Raku 肌肉,我想出了这句话作为替代方案:

map(-> $k, $v { $cfg.param("%config{'short_name'}.$k", $v) }, %config.kv);
Run Code Online (Sandbox Code Playgroud)

它的可读性较差(至少对于我未经训练的眼睛来说),但它有效。

我的预感是有一些好方法可以使这段代码更加简洁和可读。有兴趣看看我是否是对的。

wam*_*mba 6

  • 重写(恕我直言,如果变量发生更改,for则比 更合适)map

        use Config::Simple:from<Perl5>;
    
        my $cfg = Config::Simple.new: syntax => 'ini';
        my %config := short_name => 'blah';
    
        $cfg.param: "%config<short_name>\.{.key}", .value  for %config;
    
        print $cfg.as_string();
    
    Run Code Online (Sandbox Code Playgroud)
  • 经过set_block

        use Config::Simple:from<Perl5>;
    
        my $cfg = Config::Simple.new: syntax => 'ini';
        my %config = short_name => 'blah';
    
        $cfg.set_block: %config<short_name>, %config;
    
        print $cfg.as_string();
    
    Run Code Online (Sandbox Code Playgroud)

  • 哇酷。我在第一个代码块中看到了一些新语法。很有意思。谢谢。看起来我错过了 Simple::Config 文档中的 set_block 。加倍感谢。 (2认同)