我很好奇,如果我可以在沒有任何東西的情況下將東西插入匹配樹。沒有相關的問題,我試圖解決。我可以在匹配樹中插入命名捕獲而不實際匹配任何內容嗎?
在這個例子中,我有一個令牌market
,它檢查它的匹配是散列中的一個鍵。我試圖以某種方式將該散列的值插入匹配樹中。我想我可以有一個總是匹配的標記,long_market_string
,然後以某種方式查看樹,看看market
匹配了什麼。
grammar OrderNumber::Grammar {
token TOP {
<channel> <product> <market> <long_market_string> '/' <revision>
}
token channel { <[ M F P ]> }
token product { <[ 0..9 A..Z ]> ** 4 }
token market {
(<[ A..Z ]>** 1..2) <?{ %Market_Shortcode{$0}:exists }>
}
# this should figure out what market matched
# I don't particularly care how this happens as long as
# I can insert this into the match tree
token long_market_string { <?> }
token revision { <[ A..C ]> }
}
有沒有辦法在創建時混淆Match
樹?
我可以做一些事情反轉:
grammar AppleOrderNumber::Grammar {
token TOP {
<channel> <product> <long_market_string> '/' <revision>
}
token channel { <[ M F P ]> }
token product { <[ 0..9 A..Z ]> ** 4 }
token market {
(<[ A..Z ]>** 1..2) <?{ %Market_Shortcode{$0}:exists }>
}
token long_market_string { <market> }
token revision { <[ A..C ]> }
}
但是,它處理這種情況。我更願意插入任意數量的東西。
這不是接近我問的,真的。所有這一切都很簡單。我想將其他東西插入沒有令牌的匹配樹中。你不能「做幾乎任何事情」,因爲匹配對象有不可變的位。 –
@briandfoy一個Int也是一個不可變的對象。當我說一個標記是一種方法時,我的意思是它繼承了Method,並添加了一堆東西。如果你用一種常規的方法自己完成這些事情,那麼你可以做一切令牌可以做的事情。我不打算花一週或更長時間看源代碼來做幾乎沒有人需要做的事情。在你提出問題之前,我曾多次嘗試過這樣做,並且認爲花費數小時後它不值得。 –
好的,但我已經知道,並沒有辯論這一點。你說過你試過同樣的事情(我想暗示你不能完成它),但這聽起來像是你試圖說服我自己做這件事很簡單。那裏有混合信息。 –