Perl 6 - 散列也是容器

散列也是容器

假設(shè)我們想計算某個東西的出現(xiàn)次數(shù), 我們通常的做法是弄一個 "seen-hash" 散列。有時候我們有一組待查詢的鍵, 其中有些鍵可能不在我們所掃描的數(shù)據(jù)中。那是一種特殊情況, 但是 Perl 6 能夠完美地解決, 因為散列也是容器, 因此我們能夠擁有默認值。

my $words = <Hashes are containers too>.lc;
constant alphabet = 'a' .. 'z';

my %seen of Int is default(0);

%seen{$_}++ for $words.comb;
put "$_: %seen{$_}" for alphabet;

輸出結(jié)果:

a: 3
b: 0
c: 1
d: 0
e: 3
f: 0
g: 0
h: 2
i: 1
j: 0
k: 0
l: 0
m: 0
n: 2
o: 3
p: 0
q: 0
r: 2
s: 3
t: 2
u: 0
v: 0
w: 0
x: 0
y: 0
z: 0

$words 中沒有出現(xiàn)的特殊字符由 is default(0) 處理了。
默認值可以被精心設(shè)計。我們來弄一個在數(shù)值上下文中為默認值為 0 但是在字符串上下文中為默認值為 NULL 并且總是被定義的一個散列。

my %seen of Int is default(0 but role :: { method Str() {'NULL'} });
say %seen<not-there>, %seen<not-there>.defined, Int.new(%seen<not-there>);

# OUTPUT
# ?NULLTrue0
?
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

推薦閱讀更多精彩內(nèi)容

  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理,服務(wù)發(fā)現(xiàn),斷路器,智...
    卡卡羅2017閱讀 134,973評論 19 139
  • 標題: Rakudo and NQP Internals子標題: The guts tormented imple...
    焉知非魚閱讀 1,433評論 1 3
  • 從匹配中返回值 Match 對象 成功的匹配總是返回一個 Match 對象, 這個對象通常也被放進 $/ 中, (...
    焉知非魚閱讀 1,842評論 0 1
  • 問答題47 /72 常見瀏覽器兼容性問題與解決方案? 參考答案 (1)瀏覽器兼容問題一:不同瀏覽器的標簽?zāi)J的外補...
    _Yfling閱讀 13,807評論 1 92
  • 【R·閱讀原文片段】 我們的意思和別人的理解有時可能是兩回事。如果無法確定對方是否已經(jīng)明白,我們可能就需要得到反饋...
    深夜初景閱讀 482評論 0 0