2015-05-13 28 views
6

O optparse-applicative ile birbirini dışlayan seçenekleri belirlemek kolaydır:Çoklu karşılıklı olarak birbirinden bağımsız seçenekler sağlandığında, optparse uygulamayla belirli bir hata mesajı nasıl sağlanır?

data Exclusive = E1 | E2 

exclusiveParser :: Parser ExclusiveOption 
exclusiveParser = 
     (flag' E1 (short 'e1') 
    <|> (flag' E2 (short 'e2') 

yukarıdaki çözümleyici ya -e1 veya -e2, ancak ikisini ayrıştırmak olacaktır. Hem -e1 hem de -e2 sağlandığında, varsayılan optparse uygulamalı eylem, uygulamanın kullanım mesajını yazdırmaktır. Kullanıcıya, hem -e1 hem de -e2 sağlayamayacaklarını bildiren belirli bir hata iletisi vermek istiyorum, ancak bunu yapmak için açık bir yol göremiyorum.

Herhangi bir öneri (veya çözüm) takdir edilecektir?

cevap

2

Ben optparse-applicative aşina değilim, bu yüzden hangi hata-yazdırma tesisleri sağladığından emin değilim. (Bazen ayrıştırıcı birleştirici kitaplıkları, yazdırılan hatayı değiştiren bir ilkel sunar, ancak bunu, optisell uygulamalı belgelerin hızlı bir yağmuru için hiçbir şey görmedim. Tamamen bunu kaçırdım.)

Ancak Hiçbir şey kütüphaneden alınamaz, her iki bayrağı da kabul ederek kendi mesajınızı her zaman yazdırabilirsiniz. Örneğin. (Seçenekler tüm çözümlü kez yani) Eğer Both görürseniz

data Exclusive = E1 | E2 | Both 
exclusiveParser 
    = (flag' E1 (short 'e')) 
    <|> (flag' E2 (short 'f')) 
    <|> (flag' Both (short 'e') <* flag' Both (short 'f')) 

Sonra üst düzey işleyicisinde, o anda kendi işçiliği bir hata mesajı verebilir.