这个循环还有哪些其他方式可以重写?
What are some other ways this loop can be rewritten?
得到这个简单的循环:
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);
}
工作正常。但是我想更加熟悉实现相同目标的其他方法,即使只是为了舒适地阅读其他人的代码。另外,循环似乎是“老式”的做事方式,而不是“Raku-like”,我需要以更高级的方式使用函数来更自在地工作。
无论如何,为了伸展我的新 Raku 肌肉,我想出了这个单线作为替代方案:
map(-> $k, $v { $cfg.param("%config{'short_name'}.$k", $v) }, %config.kv);
它的可读性较差(至少对于我未经训练的人来说),但它有效。
我的直觉是有一些好的方法可以使这段代码更加简洁和可读。有兴趣看看我是否正确。
重写(恕我直言,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();
来自 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();
得到这个简单的循环:
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);
}
工作正常。但是我想更加熟悉实现相同目标的其他方法,即使只是为了舒适地阅读其他人的代码。另外,循环似乎是“老式”的做事方式,而不是“Raku-like”,我需要以更高级的方式使用函数来更自在地工作。
无论如何,为了伸展我的新 Raku 肌肉,我想出了这个单线作为替代方案:
map(-> $k, $v { $cfg.param("%config{'short_name'}.$k", $v) }, %config.kv);
它的可读性较差(至少对于我未经训练的人来说),但它有效。
我的直觉是有一些好的方法可以使这段代码更加简洁和可读。有兴趣看看我是否正确。
重写(恕我直言,
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();
来自
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();