Perl 6 中的術語

匿名


子例程、方法或子方法跨新,當它們不能通過名字調(diào)用時域帐,就被稱為匿名的

# named subroutine
sub double($x) { 2 * $x };
# 匿名子例程,存儲在一個具名的標量里
my $double = sub ($x) { 2 * $x };

注意肖揣,匿名子例程仍然可以有名字

# 使用 anon 關鍵字使子例程匿名
my $s = anon sub triple($x) { 3 * $x }
say $s.name;        # triple

副詞


通常, 副詞是函數(shù)的命名參數(shù). 也有一些其它特殊語法形式允許副詞出現(xiàn)在某些合適的地方:

q:w"foo bar"   # ":w" is a Quotelike form modifier adverb
m:g/a|b|c/     # ":g" is also
4 +> 5 :rotate # ":rotate" is an operator adverb
@h{3}:exists   # ":exists" is also, but is known as a subscript adverb

副詞通常使用冒號對兒標記來表示, 因為這個原因, 冒號對兒標記法也以副詞對兒形式著稱:

:a(4)          # Same as "a" => 4

Autothreading


Autothreading 是這樣的: 如果你傳遞一個 junction 給子例程, 該子例程期望的參數(shù)類型為Any 或它的子類型. 那么這個子例程調(diào)用會被執(zhí)行多次, 每次使用一個不同的 junction 狀態(tài). 這些調(diào)用的結果被組合成一個跟原 junction 同類型的 junction.

sub f($x) { 2 * $x };
if f(1|2|3) == 4 {
    say 'success';
}

這里 f() 是含有一個參數(shù)的子例程龙优,然而因為它沒有顯式的類型聲明事秀,它就被隱式的聲明為 Any 型彤断。 Junction 參數(shù)使 f(1|2|3) 調(diào)用在內(nèi)部作為 f(1)|f(2)|f(3) 執(zhí)行,而結果是跟原 junction 同類型的 junction , 即 2|4|6. 這種把一個 Junction 分成對多次函數(shù)調(diào)用的處理就叫做 autothreading.

Colon Pair and Colon List


冒號對兒是用于創(chuàng)建或 Pair 對象的便捷語法. 兩種最常見的形式是:

:a(4)          # Same as "a" => 4,   same as Pair.new(:key<a>,:value(5))
:a<4>          # Same as "a" => "4", same as Pair.new(:key<a>,:value<5>)

這也是人們熟知的副詞對兒形式. 注意, 當冒號后面括號前面的部分不是一個合法的標識符的時候, 會應用其它語義, 不是所有的副詞對兒都創(chuàng)建 Pair 對象.
另外兩個常見的形式是:

:a             # Same as :a(True)
:!a            # Same as :a(False)

一個 colon 列表是一個僅包含冒號對兒的列表, 不需要逗號, 甚至不需要空格:

:a(4):c:!d:c   # Same as a => 4, c => True, d => False, c => True

Constraint


約束是給參數(shù)或 subset 類型添加的限制. 通過單詞 where 引入約束. 在下面的例子中, 約束用于確保 , 當調(diào)用一個名為 abbreviate 的子例程, 其參數(shù)為一個長度小于 10 個字符的字符串時,會拋出一個錯誤:

sub abbreviate (Str $thing where { .chars >= 10 }) { ... }

上例中的 Str 也是一個約束, 但是經(jīng)常作為"類型約束".

Instance


類的實例在其它編程語言中也叫對象. 對象存儲屬性, 通常是 new 方法調(diào)用的返回值, 或者是對象字面量.
大部分類型的實例被定義為 True, 例如 defined($instance) 為 True.

my Str $str = "hello";  ## 這使用內(nèi)建類型,例如 Str
if defined($str) {
    say "Oh, yeah. I'm defined.";
} else {
    say "No. Something off? ";
}
## if you wanted objects...
class A {
    # nothing here for now.
}
my $an_instance = A.new;
say $an_instance.defined.perl;# defined($an_instance) works too.

類擁有方法和屬性的所有藍圖, 而類的實例把藍圖帶到真實世界中.

Invocant


在 Perl 6 中調(diào)用方法的對象叫做調(diào)用者. 在方法中它就是 self 引用的東西.

say 'str'.uc;   # 'str' 是 方法 uc 的調(diào)用者

Literal


字面量是一塊直接代表對象的代碼, 通常指向?qū)ο笞陨?

my $x = 2;      # the 2 is a literal
say $x;         # $x is not a literal, but a variable

lvalue


lvalue 或者左值是能出現(xiàn)在賦值操作符左側的任何東西; 典型的左值有變量,私有屬性和 is rw屬性, 變量列表和左值子例程.
左值的例子:

Declaration             lvalue          Comments
my $x;                  $x
my ($a, $b);            ($a, $b)
has $!attribute;        $!attribute     Only inside classes
has $.attrib is rw;     $.attrib
sub a is rw { $x };     a()

不是左值的例子:

3                        # literals
constant x = 3;          # constants
has $.attrib;            # attributes; you can only assign to $!attrib
sub f { }; f();          # "normal" subs are not writable
sub f($x) { $x = 3 };    # error - parameters are read-only by default

Mainline


mainline 是程序中不屬于任何 block 的程序文本.

use v6;     # mainline
sub f {
            # not in mainline, in sub f
}
f();        # in mainline again

Slurpy


子例程或方法中的形參如果能接收任意數(shù)量的參數(shù), 那這個形參就會被認為是 slurpy 的. 它由參數(shù)名字前面的星號標出.

sub sum (*@numbers) {
    return [+] @numbers;
}

Type Object


類型對象是一個代表類 /role/package/grammar/enum 的對象. 它通常和類型名相同.

class A { };
say A;              # A is the type object
my $x = A.new();    # same here
my $x = class {
    method greet() {
        say "hi";
    }
}

# $x now holds a type object returned from the
# anonymous class definition
最后編輯于
?著作權歸作者所有,轉載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末宰衙,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子供炼,更是在濱河造成了極大的恐慌,老刑警劉巖窘疮,帶你破解...
    沈念sama閱讀 216,591評論 6 501
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件劲蜻,死亡現(xiàn)場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機轧苫,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,448評論 3 392
  • 文/潘曉璐 我一進店門含懊,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事嘿歌〉停” “怎么了宙帝?”我有些...
    開封第一講書人閱讀 162,823評論 0 353
  • 文/不壞的土叔 我叫張陵步脓,是天一觀的道長愿待。 經(jīng)常有香客問我,道長靴患,這世上最難降的妖魔是什么仍侥? 我笑而不...
    開封第一講書人閱讀 58,204評論 1 292
  • 正文 為了忘掉前任,我火速辦了婚禮鸳君,結果婚禮上,老公的妹妹穿的比我還像新娘相嵌。我一直安慰自己腿时,他們只是感情好,可當我...
    茶點故事閱讀 67,228評論 6 388
  • 文/花漫 我一把揭開白布饭宾。 她就那樣靜靜地躺著批糟,像睡著了一般。 火紅的嫁衣襯著肌膚如雪看铆。 梳的紋絲不亂的頭發(fā)上徽鼎,一...
    開封第一講書人閱讀 51,190評論 1 299
  • 那天,我揣著相機與錄音弹惦,去河邊找鬼否淤。 笑死,一個胖子當著我的面吹牛棠隐,可吹牛的內(nèi)容都是我干的石抡。 我是一名探鬼主播,決...
    沈念sama閱讀 40,078評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了璧坟?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 38,923評論 0 274
  • 序言:老撾萬榮一對情侶失蹤隐解,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后诫睬,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體煞茫,經(jīng)...
    沈念sama閱讀 45,334評論 1 310
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,550評論 2 333
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了续徽。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片蚓曼。...
    茶點故事閱讀 39,727評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖炸宵,靈堂內(nèi)的尸體忽然破棺而出辟躏,到底是詐尸還是另有隱情,我是刑警寧澤土全,帶...
    沈念sama閱讀 35,428評論 5 343
  • 正文 年R本政府宣布捎琐,位于F島的核電站,受9級特大地震影響裹匙,放射性物質(zhì)發(fā)生泄漏瑞凑。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,022評論 3 326
  • 文/蒙蒙 一概页、第九天 我趴在偏房一處隱蔽的房頂上張望籽御。 院中可真熱鬧,春花似錦惰匙、人聲如沸技掏。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,672評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽哑梳。三九已至,卻和暖如春绘盟,著一層夾襖步出監(jiān)牢的瞬間鸠真,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,826評論 1 269
  • 我被黑心中介騙來泰國打工龄毡, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留吠卷,地道東北人。 一個月前我還...
    沈念sama閱讀 47,734評論 2 368
  • 正文 我出身青樓沦零,卻偏偏與公主長得像祭隔,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子路操,可洞房花燭夜當晚...
    茶點故事閱讀 44,619評論 2 354

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

  • 操作符 操作符優(yōu)先級 在像 1 + 2 * 3 這樣的表達式中序攘, 2 * 3 被首先計算, 因為中綴操作符 * ...
    焉知非魚閱讀 1,397評論 0 1
  • 第一章 概要 Comming soon! 第二章 基礎 假設有一場乒乓球比賽寻拂,比賽結果以這種格式記錄:Player...
    焉知非魚閱讀 339評論 0 0
  • Functions and Functional Programming in Perl 6 例程(Routine...
    焉知非魚閱讀 706評論 0 1
  • 簽名也是對象 簽名是一個對象, 就像 Perl 6 中的任何其它東西一樣。 任何 Callable 類型中都有簽名...
    焉知非魚閱讀 452評論 0 0
  • TITLE 下標 SUBTITLE 通過索引或鍵訪問數(shù)據(jù)結構中的元素丈牢。 通常祭钉,人們需要引用集合或數(shù)據(jù)結構中的一個特...
    焉知非魚閱讀 361評論 0 0