Perl 6 中的 feed 操作符

Sequencer Precedence

infix ==>

這個流操作符(feed operator)從它的左側接收結果并把結果作為最后一個參數傳遞給下一個(右側的)例程(routine)痰哨。

這個操作符的優(yōu)先級很松散所以你需要使用圓括號把結果賦值給其它變量, 或者你甚至可以使用另外一個流操作符! 在接收單個參數或第一個參數為 block 的程序/方法的例子中, 你必須經常使用圓括號來調用(盡管這對于最后一個例程/方法不是必須的)匾嘱。

# Traditional structure, read bottom-to-top
my @result =
    sort               # (4) Sort, result is <Earth People>
    grep { /<[PE]>/ }, # (3) Look for P or E
    map { .tc },       # (2) Capitalize the words
    <people of earth>; # (1) Start with the input

# Feed (left-to-right) with parentheses, read top-to-bottom
@result = (
    <people of earth>  # (1) Start with the input
    ==> map({ .tc })   # (2) Capitalize the words
    ==> grep /<[PE]>/  # (3) Look for P or E
    ==> sort           # (4) Sort, result is <Earth People>
);

# For illustration, method chaining equivalent, read top-to-bottom
@result =
    <people of earth>  # (1) Start with the input
    .map({ .tc })      # (2) Capitalize the words
    .grep(/<[PE]>/)    # (3) Look for P or E
    .sort;             # (4) Sort, result is <Earth People>

# To assign without the need of parentheses use another feed operator
<people of earth>
    ==> map({ .tc })
    ==> grep /<[PE]>/
    ==> sort()
    ==> @result;

# It can be useful to capture a partial result, however, unlike
# the leftward feed operator, it does require parentheses or a semicolon
<people of earth>
    ==> map({ .tc })
    ==> my @caps; @caps # also could wrap in parentheses instead
    ==> grep /<[PE]>/
    ==> sort()
    ==> @result;

這個流操作符能讓你在例程之外構建方法鏈那樣的模式并且方法的結果能在不相關的數據上調用。在方法鏈中, 你被限制于使用數據身上可用的方法或使用之前的方法調用的結果撬讽。使用流操作符, 那個限制沒有了。寫出來的代碼比一系列用多個換行符打斷的方法調用更加可讀游昼。

注: 在將來, 這個操作符會在它獲得并行地運行列表操作的能力之后有所變化。它會強制左側的操作數作為一個閉包(它能被克隆并運行在子線程中)變得可閉合烘豌。

infix <==

這個向左的流操作符從右側接收結果并把結果作為最后的一個參數傳遞給它前面的(左側的)例程。這為一系列列表操作函數闡明了從右到左的數據流廊佩。

# Traditional structure, read bottom-to-top
my @result =
    sort                   # (4) Sort, result is <Earth People>
    grep { /<[PE]>/ },     # (3) Look for P or E
    map { .tc },           # (2) Capitalize the words
    <people of earth>;     # (1) Start with the input

# Feed (right-to-left) with parentheses, read bottom-to-top
@result = (
    sort()                 # (4) Sort, result is <Earth People>
    <== grep({ /<[PE]>/ }) # (3) Look for P or E
    <== map({ .tc })       # (2) Capitalize the words
    <== <people of earth>  # (1) Start with the input
);

# To assign without parentheses, use another feed operator
@result
    <== sort()             # (4) Sort, result is <Earth People>
    <== grep({ /<[PE]>/ }) # (3) Look for P or E
    <== map({ .tc })       # (2) Capitalize the words
    <== <people of earth>; # (1) Start with the input

# It can be useful to capture a partial result
@result
    <== sort()
    <== grep({ /<[PE]>/ })
    <== my @caps # unlike ==>, there is no need for additional statement
    <== map({ .tc })
    <== <people of earth>;

和向右的流操作符不一樣, 這個結果不能嚴格地映射為方法鏈靖榕。然而, 和上面?zhèn)鹘y的結構中每個參數使用一行分割相比, feed 操作符寫出的代碼比逗號更具描述性。向左的流操作符也允許你打斷語句并捕獲一個可能對調試來說極其方便的中間結果或者接收那個結果并在最終結果身上創(chuàng)建另外一個變種序矩。

注意: 在將來, 這個操作符會在它獲得并行地運行列表操作的能力之后有所變化跋破。它會強制右側的操作數作為一個閉包變得可閉合(它能被克隆并運行在子線程中)

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市毒返,隨后出現的幾起案子,更是在濱河造成了極大的恐慌拧簸,老刑警劉巖,帶你破解...
    沈念sama閱讀 217,826評論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件贾富,死亡現場離奇詭異,居然都是意外死亡颤枪,警方通過查閱死者的電腦和手機,發(fā)現死者居然都...
    沈念sama閱讀 92,968評論 3 395
  • 文/潘曉璐 我一進店門畏纲,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人盗胀,你說我怎么就攤上這事∑被遥” “怎么了?”我有些...
    開封第一講書人閱讀 164,234評論 0 354
  • 文/不壞的土叔 我叫張陵米间,是天一觀的道長。 經常有香客問我屈糊,道長,這世上最難降的妖魔是什么逻锐? 我笑而不...
    開封第一講書人閱讀 58,562評論 1 293
  • 正文 為了忘掉前任,我火速辦了婚禮昧诱,結果婚禮上,老公的妹妹穿的比我還像新娘盏档。我一直安慰自己凶掰,他們只是感情好蜈亩,可當我...
    茶點故事閱讀 67,611評論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著畅涂,像睡著了一般。 火紅的嫁衣襯著肌膚如雪道川。 梳的紋絲不亂的頭發(fā)上立宜,一...
    開封第一講書人閱讀 51,482評論 1 302
  • 那天臊岸,我揣著相機與錄音,去河邊找鬼扇单。 笑死,一個胖子當著我的面吹牛蜘澜,可吹牛的內容都是我干的。 我是一名探鬼主播鄙信,決...
    沈念sama閱讀 40,271評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼装诡!你這毒婦竟也來了?” 一聲冷哼從身側響起鸦采,我...
    開封第一講書人閱讀 39,166評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎渔伯,沒想到半個月后,有當地人在樹林里發(fā)現了一具尸體锣吼,經...
    沈念sama閱讀 45,608評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 37,814評論 3 336
  • 正文 我和宋清朗相戀三年玄叠,在試婚紗的時候發(fā)現自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片读恃。...
    茶點故事閱讀 39,926評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖寺惫,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情肌蜻,我是刑警寧澤互墓,帶...
    沈念sama閱讀 35,644評論 5 346
  • 正文 年R本政府宣布蒋搜,位于F島的核電站,受9級特大地震影響豆挽,放射性物質發(fā)生泄漏育谬。R本人自食惡果不足惜帮哈,卻給世界環(huán)境...
    茶點故事閱讀 41,249評論 3 329
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望咖刃。 院中可真熱鬧,春花似錦憾筏、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,866評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽古拴。三九已至,卻和暖如春黄痪,著一層夾襖步出監(jiān)牢的瞬間紧帕,已是汗流浹背满力。 一陣腳步聲響...
    開封第一講書人閱讀 32,991評論 1 269
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留油额,地道東北人。 一個月前我還...
    沈念sama閱讀 48,063評論 3 370
  • 正文 我出身青樓潦嘶,卻偏偏與公主長得像,于是被迫代替她去往敵國和親掂僵。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 44,871評論 2 354

推薦閱讀更多精彩內容