亚洲综合原千岁中文字幕_国产精品99久久久久久久vr_无码人妻aⅴ一区二区三区浪潮_成人h动漫精品一区二区三

主頁 > 知識庫 > Perl5和Perl6對比使用Sigils的差別

Perl5和Perl6對比使用Sigils的差別

熱門標簽:熱門電銷機器人 電話機器人哪里有賣 惠州龍門400電話要怎么申請 萬利達百貨商場地圖標注 河南虛擬外呼系統公司 上海企業外呼系統 okcc外呼系統怎么調速度 外呼電信系統 智能機器人電銷神器

我們將看到Sigls(變量名稱開頭處的符號)Perl 5和Perl 6之間的差別。

概述

讓我們從Perl 5和Perl 6中的Sigils概述開始:

符號 Perl5 Perl6
@   Array  Positional
%   Hash  Associative
  Subroutine  Callable
Scalar  Item
Typeglob N/a

@(Array vs. Positional)

在perl 5中定義數組時,可以創建一個可擴展的標量值列表,并給它一個帶有sigil的名稱。@:

# Perl 5
my @foo = (1,2,3);
push @foo, 42;
say for @foo; # 1␤2␤3␤42␤

在perl 6中定義數組時,將創建一個新的列陣對象和綁定它以詞法墊中的那個名字輸入條目。因此:

# Perl 6
my @foo = 1,2,3;
push @foo, 42;
.say for @foo; # 1␤2␤3␤42␤

在功能上與Perl 5中相同。然而,第一行是用于:

# Perl 6
my @foo := Array.new( 1,2,3 );

這將綁定(而不是賦值)一個新的列陣對象指向詞匯定義的名稱。@foo。這,這個,那,那個@perl 6中的sigil表示一個類型約束:如果您想用該sigil將某個東西綁定到lexpad條目中,則它必執行位置角色。要確定一個類是否使用SmartMatch執行某個角色并不困難:

# Perl 6
say Array ~~ Positional; # True

您可以認為perl 6中的所有數組都是以與綁定陣列在Perl 5中實現。而這也離事實不遠。如果不深入細節,一個簡單的例子可能會澄清這一點。這,這個,那,那個at-POS方法是實現位置角色。每當需要訪問單個元素時,都會調用此方法。所以,當你寫:

say @a[42]

你正在執行:

say @a.AT-POS(42)

當然,這不是唯一可以實現的方法;更多.

而不是必須綁定您的類來執行位置角色,有一種特殊的語法使用是特質。所以不必寫:

# Perl 6
my @a := YourClass.new( 1,2,3 );

你可以寫:

# Perl 6
my @a is YourClass = 1,2,3;

在Perl 5中,綁定數組比“普通”數組慢得多。在Perl 6中,數組在啟動時同樣緩慢。幸運的是,rakudo perl 6通過內聯和“在定時”(Jiting)優化熱代碼路徑。操作碼在可能的情況下使用機器代碼。(由于優化器的進步,這種情況發生得更快、更頻繁、更好)。

%(Hash vs. Associative)

Perl 6中的散列實現類似于數組;您還可以將它們視為綁定散列(使用Perl 5術語)。而不是位置用于實現數組的角色,則結合性角色應用于實現散列。

同樣,一個簡單的例子可能會有所幫助。關鍵方法是實現結合性角色。每當需要訪問特定鍵的值時,都會調用此方法。所以,當你寫:

say %hfoo>

你正在執行:

say %h.AT-KEY("foo")

當然,有許多其他方法 你可以實現。

(Subroutine vs. Callable)

在Perl 5中,只有一種可調用的可執行代碼,即子程序:

# Perl 5
sub frobnicate { shift ** 2 }

而且,如果要將子例程作為參數傳遞,則需要獲得對它的引用:

# Perl 5
sub do_stuff_with {
 my $lambda = shift;
 $lambda(shift);
}
say do_stuff_with( \frobnicate, 42 ); # 1764

在Perl 6中,多種類型的對象可以包含可執行代碼。他們的共同點是他們消耗了可贖回角色.

Sgil強制綁定到執行可贖回角色,就像%信號與結合性角色和@信號與位置角色。一個與Perl 5非常接近的例子是:

# Perl 6
my foo = sub ($a,$b) { $a + $b }
say foo(42,666); # 708

注意,即使變量具有Sigil,你知道不需要使用它來執行該變量中的代碼。實際上,如果您在開始與普通的人相比,沒有什么區別分聲明:

# Perl 6
BEGIN my foo = sub ($a,$b) { $a + $b } # same as sub foo()

與Perl 5不同的是,在Perl 6中,開始塊可以是沒有塊的單個語句,因此它與外部共享其詞法范圍。但我們將在以后的文章中更多地討論這個問題。

使用變量是在編譯時知道某物可執行文件,即使某物還不知道。

還有其他方法可以設置一段代碼以供執行:

# Perl 6
my boo = -> $a, $b { $a + $b } # same, using a Block with a signature
my goo = { $^a + $^b }   # same, using auto-generated signature
my woo = * + *;     # same, using Whatever currying

還可以使用在簽名內簽名以表示被調用者希望在那里執行什么東西。這使我們回到本節中的前兩個代碼示例:

# Perl 5
sub frobnicate { shift ** 2 }
sub do_stuff_with {
 my $lambda = shift;
 $lambda(shift);
}
say do_stuff_with( \frobnicate, 42 ); # 1764
# Perl 6
sub frobnicate { $^a ** 2 }
sub do-stuff-with(lambda, $param) { lambda($param) }
say do-stuff-with( frobnicate, 42 ); # 1764

注意,在Perl 6中,您不需要接受引用;您可以簡單地傳遞代碼對象如作為參數。

$(Scalar vs. Item)

與@、%和Sigils相比,$sigil有點平淡。它不強制執行任何類型檢查,因此可以將其綁定到任何類型的對象。因此,當你寫:

# Perl 6
my $answer = 42;

像這樣的事情發生了:

# Perl 6
my $answer := Scalar.new(42);

除了在一個很低的水平。因此,如果您想知道,此代碼將無法工作。當你聲明標量變量時,就是這樣。

在Perl 6中,$還指出,其中的任何內容都應被視為單一的項目。因此,即使標量容器中填充了列陣對象時,在需要迭代的情況下,它將被視為單個項:

# Perl 6
my @foo = 1,2,3;
my $bar = Array.new(1,2,3); # alternately: [1,2,3]
.say for @foo; # 1␤2␤3␤
.say for $bar; # [1 2 3]

請注意,后一種情況只適用于一迭代VS三在前一種情況下。您可以通過前綴適當的sigil來指示是否要迭代某些內容:

# Perl 6
.say for $@foo; # [1 2 3] , consider the array as an item
.say for @$bar; # 1␤2␤3␤ , consider the scalar as a list

但也許這會把我們帶到噪音太遠的地方。幸運的是,還有更詳細的等價物:

# Perl 6
.say for @foo.item; # [1 2 3] , consider the array as an item
.say for $bar.list; # 1␤2␤3␤ , consider the scalar as a list

* (Typeglobs)

正如您可能已經注意到的,Perl 6沒有*sigil或type globs的概念。如果你不知道是什么類型的球體,你不必擔心這個。您可以很好地度過難關,而不必知道Perl 5中復雜的符號表(也可以跳過下一段)。

  • 在Perl 6中,Sigil是存儲在符號表中的名稱的一部分,而在Perl 5中,名稱是在沒有信號的情況下存儲的。例如,在Perl 5中,如果在程序中引用$foo,編譯器將查找foo(沒有sigil),然后獲取相關信息(這是一個數組),并查找它所需的$sigil索引。在Perl 6中,如果引用$foo,編譯器將查找$foo并直接使用與該鍵相關的信息。

請不要混淆用于表示Perl 6中的參數與Perl 5中的Type Gulb SIGL的SLurpy,它們彼此沒有任何關系。

Sigilless variables

Perl 5不支持無符號變量(除了可能的左值子程序,但這確實非常笨拙)。

Perl 6也不直接支持Sigilless變量,但它支持通過前綴反斜杠(\)定義中的名稱:

# Perl 6
my \the-answer = 42;
say the-answer; # 42

由于賦值的右邊是常量,這與定義常量基本相同:

# Perl 5
use constant the_answer => 42;
say the_answer; # 42
# Perl 6
my constant the-answer = 42;
say the-answer; # 42

如果定義的右邊是別的東西,那就更有趣了。就像一個容器!這允許使用以下語法技巧來獲得無符號變量:

# Perl 6
my \foo = $ = 41;    # a sigilless scalar variable
my \bar = @ = 1,2,3,4,5;   # a sigilless array
my \baz = % = a => 42, b => 666; # a sigilless hash

這基本上是創建匿名詞法實體(標量、數組和哈希),使用正常語義初始化它們,然后綁定生成的對象(標量集裝箱列陣對象,以及散列對象)的名稱,您可以將其用作Perl 6中的任何其他普通變量。

# Perl 6
say ++foo;  # 42
say bar[2]; # 3
bar[2] = 42;
say bar[2]; # 42
say baza b>; # (42 666)

當然,這樣做,您將失去所有的優勢,特別是在插值方面。然后,您將始終需要使用{ }在插值中。

# Perl 6
say "The answer is {the-answer}."; # The answer is 42.

在Perl 5的大多數版本中,對應的內容更麻煩:

# Perl 5
say "The answer is @{[the_answer]}."; # The answer is 42.

當使用Perl 5概念考慮這些變量時,Perl 6中的所有變量都可以被視為綁定變量。這使得他們在一開始就有點慢。但是在某些基準測試中,運行時優化和熱代碼路徑的JITting(從一點到機器代碼)已經使其速度超過Perl 5變量。

@, %,和在Perl 6中,不要創建任何特定的對象,而是指示一個類型約束,該約束將應用于名稱綁定到的對象。$Sigil在這方面是不同的,因為沒有要強制執行的類型約束。

@和$前綴分別表示實值化和項化,盡管使用.清單和.項目方法代替。

通過幾個語法技巧,可以不用變量名稱中的任何Sigl來編程Perl 6。

總結

以上就是這篇文章的全部內容了,希望本文的內容對大家的學習或者工作具有一定的參考學習價值,謝謝大家對腳本之家的支持。如果你想了解更多相關內容請查看下面相關鏈接

您可能感興趣的文章:
  • windows安裝perl及komodo IDE的詳細步驟
  • Windows10下hyperledger fabric1.4環境搭建過程圖解
  • PHP與Perl之間知識點區別整理
  • Perl6中的垃圾收集
  • Redis中3種特殊的數據類型(BitMap、Geo和HyperLogLog)
  • perl之print,printf,sprintf使用案例詳解

標簽:秦皇島 合肥 百色 綿陽 周口 淮安 周口 綏化

巨人網絡通訊聲明:本文標題《Perl5和Perl6對比使用Sigils的差別》,本文關鍵詞  Perl5,和,Perl6,對比,使用,;如發現本文內容存在版權問題,煩請提供相關信息告之我們,我們將及時溝通與處理。本站內容系統采集于網絡,涉及言論、版權與本站無關。
  • 相關文章
  • 下面列出與本文章《Perl5和Perl6對比使用Sigils的差別》相關的同類信息!
  • 本頁收集關于Perl5和Perl6對比使用Sigils的差別的相關信息資訊供網民參考!
  • 推薦文章
    日本久久久久久久 97久久精品一区二区三区 狠狠色噜噜狠狠狠狠97 日日干综合 五月天婷婷在线观看高清 九色福利视频 | 国产91素人搭讪系列天堂| 国产国语对白一级毛片| 国产一区二区福利久久| 日韩中文字幕在线播放| 成人a级高清视频在线观看| 国产91精品一区| 91麻豆国产级在线| 国产伦久视频免费观看 视频 | 精品国产亚洲人成在线| 在线观看导航| 高清一级做a爱过程不卡视频| 精品国产三级a∨在线观看| 亚洲天堂免费观看| 青青青草影院| 日本乱中文字幕系列| 色综合久久天天综合观看| 四虎影视精品永久免费网站| 国产欧美精品| 国产网站在线| 可以在线看黄的网站| 毛片电影网| 日韩在线观看视频网站| 欧美国产日韩在线| 亚欧成人毛片一区二区三区四区| 国产极品精频在线观看| 日本免费看视频| 久久久成人影院| 精品国产一区二区三区久久久狼| 91麻豆精品国产高清在线| 成人a级高清视频在线观看| 成人免费网站视频ww| 九九精品久久久久久久久| 九九精品在线播放| 精品国产一区二区三区免费| 日本久久久久久久 97久久精品一区二区三区 狠狠色噜噜狠狠狠狠97 日日干综合 五月天婷婷在线观看高清 九色福利视频 | 韩国三级视频网站| 国产成人精品在线| 国产韩国精品一区二区三区| 沈樵在线观看福利| 成人a级高清视频在线观看| 日韩一级黄色| 欧美夜夜骑 青草视频在线观看完整版 久久精品99无色码中文字幕 欧美日韩一区二区在线观看视频 欧美中文字幕在线视频 www.99精品 香蕉视频久久 | 免费毛片播放| 日本特黄特色aaa大片免费| 亚欧成人毛片一区二区三区四区| 日本特黄一级| 韩国妈妈的朋友在线播放| 欧美日本韩国| 国产亚洲精品aaa大片| 四虎影视久久久| 国产伦理精品| 久草免费在线色站| 国产不卡在线播放| 毛片电影网| 色综合久久天天综合观看| 亚洲精品影院久久久久久| 国产福利免费观看| 日韩字幕在线| 午夜久久网| 久久久成人影院| 一级女性大黄生活片免费| 97视频免费在线| 国产韩国精品一区二区三区| 四虎影视久久久| 国产伦久视频免费观看 视频 | 精品视频免费看| 精品在线免费播放| 国产一级强片在线观看| 欧美一区二区三区在线观看 | 亚洲天堂免费观看| 99久久精品国产高清一区二区 | 国产精品自拍在线| 精品视频一区二区三区| 欧美一级视频免费| 夜夜操天天爽| 日韩在线观看免费| 沈樵在线观看福利| 国产激情一区二区三区| 精品国产三级a∨在线观看| 久久精品大片| 国产91视频网| 香蕉视频久久| 99久久精品国产高清一区二区 | 久久99这里只有精品国产| 国产伦理精品| 精品视频一区二区三区| 精品久久久久久影院免费| 日韩中文字幕在线亚洲一区| 日日夜夜婷婷| 国产91素人搭讪系列天堂| 九九免费精品视频| 免费一级片在线观看| 精品久久久久久影院免费| 一级女性全黄生活片免费| 精品久久久久久中文字幕2017| 国产不卡在线看| 日本乱中文字幕系列| 国产美女在线观看| 美女免费黄网站| 亚洲精品影院久久久久久| 国产成人精品影视| 日韩专区一区| 中文字幕97| 美女免费黄网站| 日日夜夜婷婷| 国产成人女人在线视频观看| 亚欧成人毛片一区二区三区四区| 尤物视频网站在线观看| 香蕉视频一级| 高清一级做a爱过程不卡视频| 午夜久久网| 好男人天堂网 久久精品国产这里是免费 国产精品成人一区二区 男人天堂网2021 男人的天堂在线观看 丁香六月综合激情 | 久久福利影视| 国产成人精品影视| 国产一区二区精品久| 亚洲女人国产香蕉久久精品 | 成人a级高清视频在线观看| 国产a视频| 四虎影视久久久| 欧美夜夜骑 青草视频在线观看完整版 久久精品99无色码中文字幕 欧美日韩一区二区在线观看视频 欧美中文字幕在线视频 www.99精品 香蕉视频久久 | 国产麻豆精品hdvideoss| 日本久久久久久久 97久久精品一区二区三区 狠狠色噜噜狠狠狠狠97 日日干综合 五月天婷婷在线观看高清 九色福利视频 | 亚洲 男人 天堂| 青青久久精品| 99久久精品国产高清一区二区 | 成人免费网站视频ww| 日本伦理片网站| 国产网站在线| 欧美一级视频免费| 国产一区二区精品尤物| 日韩免费在线观看视频| 免费国产在线观看不卡| 亚洲第一页乱| 日韩欧美一二三区| 四虎影视精品永久免费网站| 九九精品在线播放| 国产精品123| 精品国产香蕉在线播出| 日本在线www| 夜夜操天天爽| 欧美激情一区二区三区视频| 国产一区免费观看| 美国一区二区三区| 精品国产三级a∨在线观看| 可以免费看污视频的网站| 久久99这里只有精品国产| 美女免费黄网站| 日本免费区| 麻豆网站在线免费观看| 一级毛片看真人在线视频| 日韩在线观看视频网站| 国产a视频| 国产视频久久久| 日韩中文字幕一区| 日日夜夜婷婷| 国产不卡在线播放| 好男人天堂网 久久精品国产这里是免费 国产精品成人一区二区 男人天堂网2021 男人的天堂在线观看 丁香六月综合激情 | 国产视频一区二区在线观看| 一a一级片| 亚洲天堂免费观看| 午夜久久网| 欧美大片毛片aaa免费看| a级精品九九九大片免费看| 国产一区二区福利久久| 欧美国产日韩久久久| 日本久久久久久久 97久久精品一区二区三区 狠狠色噜噜狠狠狠狠97 日日干综合 五月天婷婷在线观看高清 九色福利视频 | 亚久久伊人精品青青草原2020| 欧美a级成人淫片免费看| 精品久久久久久影院免费| 一级片片| 日韩男人天堂| 麻豆系列 在线视频| 色综合久久天天综线观看| 91麻豆tv| 国产高清视频免费| 九九久久国产精品| 久久久久久久免费视频| 日韩在线观看视频黄| 999久久狠狠免费精品| 欧美一区二区三区在线观看 | 色综合久久天天综线观看| 久久精品免视看国产明星| 精品国产一区二区三区久久久狼| 国产麻豆精品hdvideoss| 精品视频在线观看一区二区 | 夜夜操天天爽| 精品久久久久久中文字幕2017| 黄色免费网站在线| 夜夜操天天爽| 国产精品免费精品自在线观看| 精品国产一区二区三区久 | 亚久久伊人精品青青草原2020| a级毛片免费观看网站| 欧美夜夜骑 青草视频在线观看完整版 久久精品99无色码中文字幕 欧美日韩一区二区在线观看视频 欧美中文字幕在线视频 www.99精品 香蕉视频久久 | 成人a级高清视频在线观看| 久久国产精品只做精品| 四虎久久精品国产| 国产一区二区精品尤物| 国产网站免费视频|