A couple of syntax sweets in Raku

栏目: IT技术 · 发布时间: 4年前

内容简介:Whenworking on preparing data for theThe first construct allows us to scan two different arrays in a single loop. For example, let’s print a table with translations of weekdays:A traditional way would be to use an index:

Whenworking on preparing data for the covid.observer site, I discovered a couple of interesting findings, which I did not notice earlier or did not pay much attention to it.

Scanning two arrays together

The first construct allows us to scan two different arrays in a single loop. For example, let’s print a table with translations of weekdays:

my @English = <Monday Tuesday Wednesday Thursday
               Friday Saturday Sunday>;
my @Latvian = <pirmdiena otrdiena trešdiena ceturtdiena 
               piektdiena sestdiena svētdiena>;

A traditional way would be to use an index:

for 0 ..^ @English -> $index {
    say "@English[$index] = @Latvian[$index]";
}

In Raku, you can use the Z meta-operator to create a sequence of lists so that you get one element from each array (actually, lists are expected as input) at a time:

for @English <strong>Z</strong> @Latvian -> <strong>($english, $latvian)</strong> {
    say "$english is $latvian in Latvian.";
}

Beware to use parentheses as otherwise you get two two-element lists. Here is the modification that extracts the elements from the list inside the loop body:

for @English Z @Latvian -> <strong>$list</strong> {
    # say $list.^name; # List
    say "<strong>$list[0]</strong> (en)\t= <strong>$list[1]</strong> (lv)";
}

Using [-]

Another interesting use case is the usage of the reduction operator. For me, the most often usage would be getting a sum via [+] :

my @data = 1, 2, 3, 4, 5;
say <strong>[+]</strong> @data; # 15

And I used this for the above-mentioned site to get some totals, for example:

[+] %totals.values.map: *<confirmed>;
%daily-total{$date} = [+] %per-country.values;

Although I know that having the [+] form means putting + between the elements, I did not actually think that the sign before the first element is also a plus, but it is not the + from the surrounding meta-operator.

I had to get the number of active cases of Coronavirus, and thus the formula was straightforward:

my %data =
    confirmed => 100,
    failed    => 1,
    recovered => 70;

my $active = %data<confirmed> - %data<failed> - %data<recovered>;
say $active;

This can be re-written in a compact form with [-] applied to the slice:

my $active = <strong>[-] %data<confirmed recovered failed></strong>;
say $active;

The first element, %data<confirmed> , enters as is (with a unary + in mind), while the other two items are subtracted. Which is exactly what I needed.

I hope you like my two simple but very useful findings.

The source codes with the tests from this post are available on GitHub. The source code of an ad-hoc script generating static pages for the website can be found in its own repository .


以上所述就是小编给大家介绍的《A couple of syntax sweets in Raku》,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对 码农网 的支持!

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

About Face 3

About Face 3

Alan Cooper、Robert Reimann、David Cronin / John Wiley & Sons / 2007-5-15 / GBP 28.99

* The return of the authoritative bestseller includes all new content relevant to the popularization of how About Face maintains its relevance to new Web technologies such as AJAX and mobile platforms......一起来看看 《About Face 3》 这本书的介绍吧!

HTML 编码/解码
HTML 编码/解码

HTML 编码/解码

Base64 编码/解码
Base64 编码/解码

Base64 编码/解码

html转js在线工具
html转js在线工具

html转js在线工具