2014-09-27 3 views
1

scopt을 사용하여 scala에서 명령 행 인수를 구문 분석합니다. 하나 이상의 값을 가진 옵션을 파싱 할 수 있기를 바랍니다. 예를 들어 범위 옵션을 지정하면 정확히 두 값을 가져야합니다. 파이썬 배경에서 오는스칼라에서 scopt로 둘 이상의 값을 취하는 구문 분석 옵션

--range 25 45 

, 나는 기본적으로 대신 파이썬의 argparse의 scopt로 다음을 수행 할 수있는 방법을 찾고 있어요 :

parser.add_argument("--range", default=None, nargs=2, type=float, 
         metavar=('start', 'end'), 
         help=(" Foo bar start and stop ")) 

내가 minOccursmaxOccurs 정확히 내 문제를 해결 해달라고 생각을,도 key : 도움말의 key 예제.

+0

이러한 종류의 옵션은 표준이 아닙니다 (이 기능을 사용하는 앱에 대해서는 잘 모릅니다). 두 번째 인수 (예 : 45)가 범위 옵션과 관련이 없을 것으로 예상되기 때문에 읽기 쉽지 않습니다. 나는 scopt를 패치하지 않고 그것을하는 방법이 있다고 생각하지 않습니다. – roterl

답변

1

source code을 보면 이는 불가능합니다. 사용 된 Read 유형 클래스에는 tuplesToRead 멤버가 있지만 1 대신에 2을 입력하면 작동하지 않는 것처럼 보입니다. 기능 요청을하려면 --min 25 --max 45 또는 --range '25 45'Read 인스턴스와이 문자열을 두 부분으로 나눠서이 문제를 해결해야합니다. @roterl이 지적했듯이, 이것은 표준 구문 분석 방법이 아닙니다.

+0

소스 코드를 확인해 주셔서 감사합니다. 나는 지금 당장'--min --max' 접근 방식으로 갈 것이라고 생각합니다. – AnkurVj

0

만 값이 공간보다 다른 뭔가로 구분하는 경우 그것은 확인을해야 ...

--range 25-45 

... 당신이 수동으로 분할해야하지만. 다음과 같이 구문 분석하십시오.

opt[String]('r', "range").action { (x, c) => 
    val rx = "([0-9]+)\\-([0-9]+)".r 
    val rx(from, to) = x 
    c.copy(from = from.toInt, to = to.toInt) 
} 
// ... 
println(s" Got range ${parsedArgs.from}..${parsedArgs.to}") 
관련 문제