Perl 6 - These keys are LTA

在折騰枚舉作為子例程布爾選項的時候, 我發(fā)現(xiàn)默認的錯誤信息不夠酷诺擅。

  • Constraint type check failed for parameter '@options'

讓錯誤信息變得更具體有點困難。我們來創(chuàng)建幾個 exceptions 來告訴我們當東西出錯時究竟發(fā)生了什么苍碟。

class X::Paramenter::Exclusive is Exception {
has $.type;
    method message {
        "Parameters of {$.type.perl} are mutual exclusive"
    }
}

現(xiàn)在我們能檢查 Find::Type 的選項是否是獨占的從而拋出異常撮执。

&& ( exclusive-argument(@options, Find::Type) or fail X::Paramenter::Exclusive.new(type => Find::Type) )

class X::Parameter::UnrecognisedOption is Exception {
    has $.type;
    has $.unrecognised;
    method message {
        "Option { $.unrecognised } not any of { $.type.map({ (.^name ~ '::') xx * Z~ .enums.keys.flat }).flat.join(', ') }"
    }
}

因為枚舉對類型而言是容器, 我們能使用集合操作符來檢查并挑選出不匹配的選項(基本上, +options 吞噬的任何東西我們都不知道)。

or fail X::Parameter::UnrecognisedOption.new(type => (Find::Type, Find::Options),
    unrecognised => .item ? (|Find::Type::.values, |Find::Options::.values) )

把錯誤信息拼接在一塊兒有點復雜因為我們可以在一個給定的枚舉中得到所有枚舉鍵的一個列表, 除了那些不知道它們的限定名的蜓肆。 我們不得不在枚舉名的前面手動前置一個 ::谋币。

class X::Parameter::UnrecognisedOption is Exception {
    has $.type;
    has $.unrecognised;
    method message {
        "Option { $.unrecognised } not any of { $.type.map: { (.^name ~ '::') xx * Z~ .enums.keys.flat } }"
    }
}

這導致了一個更令人驚嘆的錯誤信息:

Option 42 not any of Type::File, Type::Dir, Type::Symlink, Options::Recursive, Options::Keep-going

這看起來都很普通。我們擁有一個參數(shù)化的吞噬參數(shù), 它帶有一個或多個枚舉而那些枚舉可能擁有一個 flag 告訴它們是否用作單選按鈕瑞信。聽起來這個 idiom 會很適合這個模塊。

翻譯的不好, 最好看原文逼友。我也不知道 LTA 是什么意思

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末秤涩,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子黎烈,更是在濱河造成了極大的恐慌,老刑警劉巖照棋,帶你破解...
    沈念sama閱讀 222,729評論 6 517
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異溶锭,居然都是意外死亡符隙,警方通過查閱死者的電腦和手機趴捅,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 95,226評論 3 399
  • 文/潘曉璐 我一進店門拱绑,熙熙樓的掌柜王于貴愁眉苦臉地迎上來丽蝎,“玉大人,你說我怎么就攤上這事征峦。” “怎么了栏笆?”我有些...
    開封第一講書人閱讀 169,461評論 0 362
  • 文/不壞的土叔 我叫張陵蛉加,是天一觀的道長。 經(jīng)常有香客問我针饥,道長,這世上最難降的妖魔是什么丁眼? 我笑而不...
    開封第一講書人閱讀 60,135評論 1 300
  • 正文 為了忘掉前任苞七,我火速辦了婚禮,結(jié)果婚禮上蹂风,老公的妹妹穿的比我還像新娘。我一直安慰自己惠啄,他們只是感情好任内,可當我...
    茶點故事閱讀 69,130評論 6 398
  • 文/花漫 我一把揭開白布死嗦。 她就那樣靜靜地躺著,像睡著了一般越走。 火紅的嫁衣襯著肌膚如雪靠欢。 梳的紋絲不亂的頭發(fā)上铜跑,一...
    開封第一講書人閱讀 52,736評論 1 312
  • 那天,我揣著相機與錄音锅纺,去河邊找鬼。 笑死坦弟,一個胖子當著我的面吹牛官地,可吹牛的內(nèi)容都是我干的酿傍。 我是一名探鬼主播驱入,決...
    沈念sama閱讀 41,179評論 3 422
  • 文/蒼蘭香墨 我猛地睜開眼亏较,長吁一口氣:“原來是場噩夢啊……” “哼莺褒!你這毒婦竟也來了雪情?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 40,124評論 0 277
  • 序言:老撾萬榮一對情侶失蹤尘执,失蹤者是張志新(化名)和其女友劉穎扁达,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體跪解,經(jīng)...
    沈念sama閱讀 46,657評論 1 320
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 38,723評論 3 342
  • 正文 我和宋清朗相戀三年窘行,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片但绕。...
    茶點故事閱讀 40,872評論 1 353
  • 序言:一個原本活蹦亂跳的男人離奇死亡惶看,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出纬黎,到底是詐尸還是另有隱情,我是刑警寧澤拆座,帶...
    沈念sama閱讀 36,533評論 5 351
  • 正文 年R本政府宣布冠息,位于F島的核電站,受9級特大地震影響逛艰,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜瓮孙,卻給世界環(huán)境...
    茶點故事閱讀 42,213評論 3 336
  • 文/蒙蒙 一杭抠、第九天 我趴在偏房一處隱蔽的房頂上張望脸甘。 院中可真熱鬧偏灿,春花似錦、人聲如沸翁垂。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,700評論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽啼肩。三九已至衙伶,卻和暖如春害碾,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背慌随。 一陣腳步聲響...
    開封第一講書人閱讀 33,819評論 1 274
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留丸逸,地道東北人剃袍。 一個月前我還...
    沈念sama閱讀 49,304評論 3 379
  • 正文 我出身青樓,卻偏偏與公主長得像笛园,于是被迫代替她去往敵國和親侍芝。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 45,876評論 2 361

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