2012-09-18 34 views
7

Tôi đang sử dụng thư viện optparse-applicative trong một ứng dụng cần nhiều chuỗi trên dòng lệnh và thực hiện một hành động trên mỗi dòng. thử đầu tiên của tôi là thế này:optparse-applicative: Yêu cầu ít nhất một đối số

arguments Just 
    (metavar "EXPR" 
    & help "Expressions to render, in zero-based De Bruijn index notation") 

Thật không may, điều này cho phép chạy chương trình với không tranh cãi, mặc dù nó không có ý nghĩa nhiều.

nỗ lực thứ hai của tôi tham gia phân tích các số đầu tiên riêng biệt, sau đó consing nó để phần còn lại của danh sách:

(:) <$> argument Just (metavar "EXPR") 
    <*> arguments Just (metavar "EXPR") 

này nên đã làm việc, nhưng nó không: khi gọi với --help, các gobbles phân tích cú pháp nó lên và xử lý nó thay vì hiển thị văn bản trợ giúp.

Vì vậy, câu hỏi của tôi là: làm thế nào để cấu hình optparse để yêu cầu ít nhất một đối số?

Trả lời

6

Được rồi – Tôi đã reported this issue cho tác giả của thư viện (Paolo Capriotti). Ông trả lời:

Vấn đề ở đây là arguments có một số logic đặc biệt để:

  • ban đầu bỏ qua đối số bắt đầu bằng '-'
  • chấp nhận '-'
  • chấp nhận lập luận bắt đầu với '-' sau khi '-' gặp phải

Với hành vi mong muốn này, arguments không thể đơn giản là được triển khai dưới dạng many argument.

gì chúng ta có thể làm để làm cho trường hợp sử dụng phổ biến như một trong số này dễ dàng hơn để đối phó với, là thêm một loạt các nhà xây dựng thuận tiện, như:

  • arguments1, danh sách đối số không trống, với các hành vi tương tự như các đối số
  • argument', phân tích 1 lý luận, bỏ qua mọi thứ bắt đầu bằng '-'

bằng cách này, nhiều tranh cãi' sẽ tương tự như đối số (nếu không có sự xử lý đặc biệt của -), và một số đối số 'để tranh luận nts1.

Đề xuất tên tốt hơn được hoan nghênh. :)

Nói cách khác, anh ấy thêm chức năng mới arguments1 để làm những gì tôi mô tả. Chức năng đó đã có sẵn kể từ phiên bản 0.5.

Bây giờ mã của tôi trông như thế này:

arguments1 Just 
    (metavar "EXPR" 
    <> help "Expressions to render, in zero-based De Bruijn index notation") 

Cảm ơn, Paolo!

+1

fyi ... kể từ phiên bản 0.9.0 'đối số' và' đối số1' không được chấp thuận để sử dụng bộ phối hợp 'nhiều' và' số' với 'đối số'. – ErikR

+0

Cảm ơn nhận xét bổ sung. – drumfire

+0

@ErikR Nhưng 'số' với đối số không in thông báo trợ giúp hữu ích theo mặc định (tức là không có' ... 'ở cuối) :-( –

Các vấn đề liên quan