Typed hashes in Perl 6

Typed hashes in Perl 6

在 Perl 6 中, 你可以通過指定變量的類型來限制變量容器的內(nèi)容, 例如:

my Int $i;

標(biāo)量變量中只有一個(gè)值。你可以將該概念擴(kuò)展到數(shù)組, 并讓其元素僅保存整數(shù), 如下例所示:

> my Int @i;
[]

> @i.push(42);
[42]

> @i.push('Hello');
Type check failed in assignment to @i;
expected Int but got Str ("Hello")
  in block <unit> at <unknown file> line 1

哈希中保存的是 pairs, 所以你可以同時(shí)指定鍵和值的類型。語法和上面的例子并無不同。

首先, 讓我們聲明值的類型:

my Str %s;

現(xiàn)在, 可以將字符串作為哈希的值:

> %s<Hello> = 'World'
World

> %s<42> = 'Fourty-two'
Fourty-two

但這個(gè)哈希不能保存整數(shù):

> %s<x> = 100
Type check failed in assignment to %s;
expected Str but got Int (100)
  in block <unit> at <unknown file> line 1

(順便提一下, 在 %s<42> 的情況下, 鍵是一個(gè)字符串。)

要指定第二個(gè)維度的類型, 即散列鍵的類型, 請?jiān)诨ɡㄌ栔兄付ㄦI的類型:

my %r{Rat};

這個(gè)變量也被稱為對象散列(object hash)。

有了這個(gè), Perl 允許使用 Rat 類型作為鍵:

> %r<22/7> = pi
3.14159265358979

> %r
{22/7 => 3.14159265358979}

嘗試使用整數(shù)或字符串作為鍵則會失敗, 例如:

> %r<Hello> = 1
Type check failed in binding to parameter 'key';
expected Rat but got Str ("Hello")
  in block <unit> at <unknown file> line 1

> %r{23} = 32
Type check failed in binding to parameter 'key';
expected Rat but got Int (23)
  in block <unit> at <unknown file> line 1

最后, 你可以同時(shí)指定鍵和值的類型:

my Str %m{Int};

此變量可用于將月份編號轉(zhuǎn)換為月份名稱, 但反過來不行:

> %m{3} = 'March'
March

> %m<March> = 3
Type check failed in binding to parameter 'key';
expected Int but got Str ("March")
  in block <unit> at <unknown file> line 1
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容