3 變量
Perl 6 的變量可以分為三類:標(biāo)量(scalars)、數(shù)組(arrays)和哈希(hashes)。
相對應(yīng)的有三種標(biāo)記方式,我們稱之為魔符(sigil),是取自拉丁文的三個(gè)符號(hào)
. $用于表示標(biāo)量;
. @用于表示數(shù)組;
. %用于表示哈希。
3.1 標(biāo)量
一個(gè)標(biāo)量變量只擁有一個(gè)值或者引用(未定義的變量取值為undef)。
#字符串標(biāo)量
my $name = 'John Doe';
say $name;
#整型標(biāo)量
my $age = 20;
say $age;
對于一個(gè)標(biāo)量可以進(jìn)行一系列專一性的操作,取決去該標(biāo)量所取得值。
字符串
my $name = 'John Doe';
say $name.uc;
say $name.chars;
say $name.flip;
JOHN DOE
8
eoD nhoJ
若需完整的關(guān)于字符串操作的方法,請移步(http://doc.perl6.org/type/Str)
整型
my $age = 17;
say $age.is-prime;
True
若需完整的關(guān)于字符串操作的方法,請移步(http://doc.perl6.org/type/Int)
有理數(shù)型
my $age = 2.3;
say $age.numerator;
say $age.denominator;
say $age.nude;
23
10
(23 10)
若需完整的關(guān)于字符串操作的方法,請移步(http://doc.perl6.org/type/Rat)
3.2 數(shù)組
數(shù)組就是包含多個(gè)值的多個(gè)列表(數(shù)組可以包含多個(gè)列表,一個(gè)列表可以包含多個(gè)值)。
my @animals = 'camel','llama','owl';
say @animals;
下述例子中展示了眾多可以對數(shù)組進(jìn)行的操作(波浪字符~用于字符串連接):
腳本
my @animals = 'camel','vicu?a','llama';
say "The zoo contains " ~ @animals.elems ~ " animals";
say "The animals are: " ~ @animals;
say "I will adopt an owl for the zoo";
@animals.push("owl");
say "Now my zoo has: " ~ @animals;
say "The first animal we adopted was the " ~ @animals[0];
@animals.pop;
say "Unfortunately the owl got away and we're left with: " ~ @animals;
say "We're closing the zoo and keeping one animal only";
say "We're going to let go: " ~ @animals.splice(1,2) ~ " and keep the " ~ @animals;
輸出
The zoo contains 3 animals
The animals are: camel vicu?a llama
I will adopt an owl for the zoo
Now my zoo has: camel vicu?a llama owl
The first animal we adopted was the camel
Unfortunately the owl got away and we're left with: camel vicu?a llama
We're closing the zoo and keeping one animal only
We're going to let go: vicu?a llama and keep the camel
注釋
.elems將返回?cái)?shù)組中的元素個(gè)數(shù);
.push()用于往數(shù)組中添加一個(gè)元素;
@animals[0]中括號(hào)中數(shù)值可以表示數(shù)組的具體位置;
.pop將數(shù)組中末尾元素移除;
.splice(a,b)可以將從a開始數(shù)的第b個(gè)元素移除。
3.2.1 固定規(guī)模的數(shù)組
一個(gè)基礎(chǔ)的數(shù)組可由下句來聲明:
my @array;
基礎(chǔ)數(shù)組也可以含有不限定的長度,也即所謂的自動(dòng)調(diào)整;
數(shù)組能夠接受任意數(shù)目的值且沒有限制;
相反,我們也可以創(chuàng)建固定大小的數(shù)組;
這些數(shù)組則在超出其最大容量時(shí)便無法使用;
聲明固定規(guī)模的數(shù)組方式很簡單,只要在數(shù)組名后面的中括號(hào)里說明元素?cái)?shù)目的上限即可:
my @array[3];
該數(shù)組可以最多含有三個(gè)元素,索引值從0到。
my @array[3];
@array[0] = "No.1元素";
@array[1] = "No.2元素";
@array[2] = "No.3元素";
如以下賦值方式是行不通的:
my @array[3];
@array[0] = "No.1元素";
@array[1] = "No.2元素";
@array[2] = "No.3元素";
@array[3] = "No.4元素";
該腳本執(zhí)行會(huì)得到報(bào)錯(cuò):
索引值3超出了范圍(0-2)
3.2.2 多維數(shù)組
我們現(xiàn)在為止所見到的數(shù)組都是一維數(shù)組,幸運(yùn)的是,我們在Perl6中還可以定義多維數(shù)組:
my @tbl[3;2];
這是一個(gè)二維數(shù)組,第一個(gè)維度可以最多含有3個(gè)元素,第二個(gè)維度可以最多含有2個(gè)元素。
my @tbl[3;2];
@tbl[0;0] = 1;
@tbl[0;1] = "x";@tbl[1;0] = 2;
@tbl[1;1] = "y";
@tbl[2;0] = 3;
@tbl[2;1] = "z";
say @tbl
若需要完整的關(guān)于數(shù)組的說明,請移步(http://doc.perl6.org/type/Array)
3.3 哈希
一個(gè)哈希,就是一組(可以理解為多個(gè))鍵-值對兒。
my %capitals = ('UK','London','Germany,'Berlin');
say %capitals;
另一種為哈希填充的方式如下:
my %capitals = ('UK' => 'London','Germany => 'Berlin');
say %capitals;
可以對哈希進(jìn)行的一些操作舉例:
腳本
my %capitals = ('UK' => 'London','Germany => 'Berlin');
%capitals.push: (France => 'Paris');
say %capitals.kv;
say %capitals.keys;
say %capitals.values;
say "The capital of France is: " ~ %capitals<France>;
輸出
(France Paris Germany Berlin UK London)
(France Germany UK)
(Paris Berlin London)
The capital of France is: Paris
注釋
.push: (鍵 => '值')用來添加新的鍵值對;
.kv返回一個(gè)包含所有鍵和值的列表;
.keys返回一個(gè)包含所有鍵的列表;
.values返回一個(gè)包含所有值的列表。
若需要完整的關(guān)于哈希的介紹,請移步:(http://doc.perl6.org/type/Hash)
3.4 類型
在之前的例子中,我們并沒有明確變量應(yīng)該取哪些類型的值。
Tips: .WHAT 會(huì)返回變量取值的類型。
my $var = 'Text';
say $var;
say $var.WHAT;
$var = 123;
say $var;
say $var.WHAT;
上述例子中,var的值的類型先是字符串,后是整型。
這種類型的變成稱為動(dòng)態(tài)分型,也即變量可能取任何類型的值。
現(xiàn)在運(yùn)行下述的腳本,同時(shí)注意在變量名前的Int:
my Int $var = 'Text';
say $var;
say $var.WHAT;
該腳本會(huì)執(zhí)行失敗并返回錯(cuò)誤提示:Type check failed in assignment to $var; expected Int but got Str(檢驗(yàn)$var的類型失敗,因?yàn)榕c期望的整型不同)
在該過程中,我們首先指定了變量$var的類型為整型(Int),所以當(dāng)我們試圖指派一個(gè)字符串型(Str)時(shí),執(zhí)行失敗。
這種編程成為靜態(tài)類型,靜態(tài)是指變量類型在賦值前已經(jīng)指定并且不能更改。
Perl6 被歸類為一種過渡類型語言,既認(rèn)可動(dòng)態(tài)分類也認(rèn)可靜態(tài)分類。
數(shù)組跟哈希也能被靜態(tài)分類
my Int @array = 1,2,3;
say @array;
say @array.WHAT;
my Str @multilingual = "Hello","Salut","Hallo","您好","?????","こんにちは";
say @multilingual;
say @multilingual.WHAT;
my Str %capitals = (UK => 'London', Germany => 'Berlin');
say %capitals;
say %capitals.WHAT;
my Int %country-codes = (UK => 44, Germany => 49);
say %country-codes;
say %country-codes.WHAT;
下表給出的是最常用的幾種類型:
前兩種你可能永遠(yuǎn)都不會(huì)用上,但還是列出以為信息拓展。
| 類型 | 描述 | 舉例 | 結(jié)果 |
|---|---|---|---|
| Mu | Perl6 類型層次的根 | ||
| Any | 對新類和大多數(shù)內(nèi)建類的默認(rèn)設(shè)置類型 | ||
| Cool | 能可替換的被當(dāng)成字符串或數(shù)值對待的值 | my Cool $var = 31; say $var.flip; say $var * 2; |
13 62 |
| Str | 字符串 |
my Str $var = "NEON"; say $var.flip;
|
NOEN |
| Int | 整數(shù)型(任意精度) | 7+7 |
14 |
| Rat | 小數(shù)型(有限精度) | 0.1+0.2 |
0.3 |
| Bool | 布爾值 | !True |
False |
先到這里,明天繼續(xù)更。