0
解析一些複雜的文本時,我需要爲了重用和可讀性原因而拆分出正則表達式定義,但似乎經常會以此一般結構的Scala代碼結束(pn
-正則表達式模式,vn
一個變量):解析器組合器中的不雅結構重複
val cp1 = p1 ~ p2 ~ p3 ~ p4 ~ p5 ~ p6 ^^
case { dummy1 ~ v2 ~ dummy3 ~ v4 ~ dummy5 ~ v6 => ACaseClass(v2, v4, v6) }
最明顯的問題是可讀性和代碼的可維護性作爲新圖案需要,因爲從佔位符酮(dummyn
)的有用匹配(vn
)的分離的插入。
那麼,有沒有更好的方式來表達意圖?我可以每dummyn
改用_
嗎?
在SNOBOL語言中,可以編寫(pat . var)
或(pat $ var)
將匹配結果賦予變量;同樣,在最新的正則表達式語法中,我們命名了捕獲組(?P<name>pat)
。其目的很明顯是保持匹配捕獲變量接近模式。
所以,我想編寫是沿着一般路線的東西:
val cp1 = p1 ~ (p2 $$ v2) ~ p3 ~ (p4 $$ v4) ~ p5 ~ (p6 $$ v6) $=>
ACaseClass(v2, v4, v6)
顯然我假設某種新的運營商$$
和$=>
這使這個簡單的語法。
可以想象宏可以提供幫助,但它們目前超出了我的能力。任何輸入歡迎!