2012-04-25 4 views
1

여러 번 시도했지만 NDESK.Options 구문 분석 예제를 간단한 vb.net 코드로 변환 할 수 없습니다 (미안하지만 전문가가 아닙니다).VBES에서 NDESK 명령 줄 구문 분석

그들이 제공하는 유일한 예는 여기에 있습니다 : 그러나 http://www.ndesk.org/doc/ndesk-options/NDesk.Options/OptionSet.html

, 나는 코드의 중요한 부분을 이해하지 않습니다

var p = new OptionSet() { 
     { "n|name=", "the {NAME} of someone to greet.", 
      v => names.Add (v) }, 
     { "r|repeat=", 
      "the number of {TIMES} to repeat the greeting.\n" + 
       "this must be an integer.", 
      (int v) => repeat = v }, 
     { "v", "increase debug message verbosity", 
      v => { if (v != null) ++verbosity; } }, 
     { "h|help", "show this message and exit", 
      v => show_help = v != null }, 
    }; 

이 부분 : V => names.Add (절) 다음과 같은 vb.net 해당 얻을 : 함수 (v) names.Add (v), 내가 못해.

누구나 친절하고 더 이해하기 쉬운 명령으로 게시 할 수 있습니까?

답변

4

위의 코드는 NDesk.Options OptionSet 개체의 VB.NET 버전입니다.
이 코드 예제에서는 컬렉션 초기화 프로그램을 사용합니다.

Static names = New List(Of String)() 
Dim repeat As Integer 
Dim verbosity As Integer 
Dim show_help As Boolean = False 

Dim p = New OptionSet() From { 
{"n|name=", "the {NAME} of someone to greet.", _ 
    Sub(v As String) names.Add(v)}, _ 
{"r|repeat=", _ 
    "the number of {TIMES} to repeat the greeting.\n" & _ 
    "this must be an integer.", _ 
    Sub(v As Integer) repeat = v}, _ 
{"v", "increase debug message verbosity", _ 
    Sub(v As Integer) verbosity = If(Not IsNothing(v), verbosity + 1, verbosity)}, _ 
{"h|help", "show this message and exit", _ 
    Sub(v) show_help = Not IsNothing(v)} 
} 

이 코드 예제는 OptionSet 컬렉션을 만든 다음 Add 메서드를 호출하는 각 옵션을 추가합니다. 또한 마지막 옵션은 함수의 함수 포인터 (AddressOf)를 전달하는 예제입니다.

Static names = New List(Of String)() 
Dim repeat As Integer 
Dim verbosity As Integer 
Dim show_help As Boolean = False 

Dim p = New OptionSet() 
p.Add("n|name=", "the {NAME} of someone to greet.", _ 
      Sub(v As String) names.Add(v)) 
p.Add("r|repeat=", _ 
      "the number of {TIMES} to repeat the greeting.\n" & _ 
      "this must be an integer.", _ 
      Sub(v As Integer) repeat = v) 
p.Add("v", "increase debug message verbosity", _ 
      Sub(v As Integer) verbosity = If(Not IsNothing(v), verbosity + 1, verbosity)) 
p.Add("h|help", "show this message and exit", _ 
      Sub(v) show_help = Not IsNothing(v)) 
' you can also pass your function address to Option object as an action. 
' like this: 
p.Add("f|callF", "Call a function.", New Action(Of String)(AddressOf YourFunctionName)) 
+0

피트,이 대답이 도움이 되었습니까? – vic

+0

나는 이것을 사용하고 99 % 효과를 냈다. 내가 놓친 핵심은'p.Parse (args)'였습니다. 어떤 이유로 나는이 라이브러리가 자동으로 작동한다고 생각했고 args가 전달되어 자동으로 파싱된다는 것을 알고있었습니다. – guanome

+0

내가 놓친 또 다른 것은 매개 변수를 정의 할 때'n | name ='입니다. 나는'='이 값을 가진 논증을 갖기 위해 필요한 것이라고 깨닫지 못했습니다. – guanome