3 變量
Perl 6 的變量可以分為三類:標量(scalars)、數組(arrays)和哈希(hashes)。
相對應的有三種標記方式,我們稱之為魔符(sigil),是取自拉丁文的三個符號
. $用于表示標量;
. @用于表示數組;
. %用于表示哈希。
3.1 標量
一個標量變量只擁有一個值或者引用(未定義的變量取值為undef)。
#字符串標量
my $name = 'John Doe';
say $name;
#整型標量
my $age = 20;
say $age;
對于一個標量可以進行一系列專一性的操作,取決去該標量所取得值。
字符串
my $name = 'John Doe';
say $name.uc;
say $name.chars;
say $name.flip;
JOHN DOE
8
eoD nhoJ
若需完整的關于字符串操作的方法,請移步(http://doc.perl6.org/type/Str)
整型
my $age = 17;
say $age.is-prime;
True
若需完整的關于字符串操作的方法,請移步(http://doc.perl6.org/type/Int)
有理數型
my $age = 2.3;
say $age.numerator;
say $age.denominator;
say $age.nude;
23
10
(23 10)
若需完整的關于字符串操作的方法,請移步(http://doc.perl6.org/type/Rat)
3.2 數組
數組就是包含多個值的多個列表(數組可以包含多個列表,一個列表可以包含多個值)。
my @animals = 'camel','llama','owl';
say @animals;
下述例子中展示了眾多可以對數組進行的操作(波浪字符~
用于字符串連接):
腳本
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
將返回數組中的元素個數;
.push()
用于往數組中添加一個元素;
@animals[0]
中括號中數值可以表示數組的具體位置;
.pop
將數組中末尾元素移除;
.splice(a,b)
可以將從a開始數的第b個元素移除。
3.2.1 固定規模的數組
一個基礎的數組可由下句來聲明:
my @array;
基礎數組也可以含有不限定的長度,也即所謂的自動調整;
數組能夠接受任意數目的值且沒有限制;
相反,我們也可以創建固定大小的數組;
這些數組則在超出其最大容量時便無法使用;
聲明固定規模的數組方式很簡單,只要在數組名后面的中括號里說明元素數目的上限即可:
my @array[3];
該數組可以最多含有三個元素,索引值從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元素";
該腳本執行會得到報錯:
索引值3超出了范圍(0-2)
3.2.2 多維數組
我們現在為止所見到的數組都是一維數組,幸運的是,我們在Perl6中還可以定義多維數組:
my @tbl[3;2];
這是一個二維數組,第一個維度可以最多含有3個元素,第二個維度可以最多含有2個元素。
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
若需要完整的關于數組的說明,請移步(http://doc.perl6.org/type/Array)
3.3 哈希
一個哈希,就是一組(可以理解為多個)鍵-值對兒。
my %capitals = ('UK','London','Germany,'Berlin');
say %capitals;
另一種為哈希填充的方式如下:
my %capitals = ('UK' => 'London','Germany => 'Berlin');
say %capitals;
可以對哈希進行的一些操作舉例:
腳本
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
返回一個包含所有鍵和值的列表;
.keys
返回一個包含所有鍵的列表;
.values
返回一個包含所有值的列表。
若需要完整的關于哈希的介紹,請移步:(http://doc.perl6.org/type/Hash)
3.4 類型
在之前的例子中,我們并沒有明確變量應該取哪些類型的值。
Tips: .WHAT 會返回變量取值的類型。
my $var = 'Text';
say $var;
say $var.WHAT;
$var = 123;
say $var;
say $var.WHAT;
上述例子中,var
的值的類型先是字符串,后是整型。
這種類型的變成稱為動態分型,也即變量可能取任何類型的值。
現在運行下述的腳本,同時注意在變量名前的Int
:
my Int $var = 'Text';
say $var;
say $var.WHAT;
該腳本會執行失敗并返回錯誤提示:Type check failed in assignment to $var; expected Int but got Str(檢驗$var的類型失敗,因為與期望的整型不同)
在該過程中,我們首先指定了變量$var
的類型為整型(Int),所以當我們試圖指派一個字符串型(Str)時,執行失敗。
這種編程成為靜態類型,靜態是指變量類型在賦值前已經指定并且不能更改。
Perl6 被歸類為一種過渡類型語言,既認可動態分類也認可靜態分類。
數組跟哈希也能被靜態分類
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;
下表給出的是最常用的幾種類型:
前兩種你可能永遠都不會用上,但還是列出以為信息拓展。
類型 | 描述 | 舉例 | 結果 |
---|---|---|---|
Mu | Perl6 類型層次的根 | ||
Any | 對新類和大多數內建類的默認設置類型 | ||
Cool | 能可替換的被當成字符串或數值對待的值 | my Cool $var = 31; say $var.flip; say $var * 2; |
13 62 |
Str | 字符串 |
my Str $var = "NEON"; say $var.flip;
|
NOEN |
Int | 整數型(任意精度) | 7+7 |
14 |
Rat | 小數型(有限精度) | 0.1+0.2 |
0.3 |
Bool | 布爾值 | !True |
False |
先到這里,明天繼續更。