수색…


소개

OptionParserARGV 명령 행 옵션을 구문 분석하는 데 사용할 수 있습니다.

필수 및 옵션 명령 행 옵션

너는 너무 복잡한 것을 찾지 않으면 손으로 명령 행을 파싱하는 것이 상대적으로 쉽다.

# Naive error checking
abort('Usage: ' + $0 + ' site id ...') unless ARGV.length >= 2

# First item (site) is mandatory
site = ARGV.shift

ARGV.each do | id |
  # Do something interesting with each of the ids
end

그러나 옵션이 복잡 해지면 OptionParser 와 같은 옵션 파서를 사용해야 할 것입니다.

require 'optparse'

# The actual options will be stored in this hash
options = {}

# Set up the options you are looking for
optparse = OptionParser.new do |opts|
  opts.banner = "Usage: #{$0} -s NAME id ..."

  opts.on("-s", "--site NAME", "Site name") do |s|
    options[:site] = s
  end

  opts.on( '-h', '--help', 'Display this screen' ) do
    puts opts
    exit
  end
end

# The parse! method also removes any options it finds from ARGV.
optparse.parse!

비파괴 parse 도 있지만 ARGV 의 나머지 부분을 사용하려는 경우 유용하지 않습니다.

OptionParser 클래스에는 필수 인수 (예 : --site 를 적용 할 수있는 방법이 없습니다. 그러나 parse! 을 실행 한 후에는 자체 검사를 수행 할 수 있습니다 parse! :

# Slightly more sophisticated error checking
if options[:site].nil? or ARGV.length == 0
  abort(optparse.help)
end

보다 일반적인 필수 옵션 처리기를 보려면 이 대답을 참조하십시오. 명확하지 않은 경우 모든 선택 사항은 귀하가 의무 사항이되지 않도록 선택하지 않는 한 선택 사항입니다.

기본값

OptionsParser 사용하면 기본값을 쉽게 설정할 수 있습니다. 옵션을 저장하는 해쉬를 미리 채 웁니다.

options = {
  :directory => ENV['HOME']
}

파서를 정의 할 때 사용자가 값을 제공하면 기본값을 덮어 씁니다.

OptionParser.new do |opts|
  opts.on("-d", "--directory HOME", "Directory to use") do |d|
    options[:directory] = d
  end
end

자세한 설명

때로는 설명이 오히려 길어질 수 있습니다. 예를 들어 irb -h 는 다음과 같은 인수를 나열합니다.

  --context-mode n  Set n[0-3] to method to create Binding Object,
                    when new workspace was created

이것을 어떻게 지원할 지 명확하지 않습니다. 대부분의 솔루션은 두 번째 줄과 다음 줄의 들여 쓰기를 첫 번째 줄에 맞추기 위해 조정이 필요합니다. 다행히도 on 메소드는 별도의 인수로 추가하여 여러 설명 행을 지원합니다.

  opts.on("--context-mode n",
          "Set n[0-3] to method to create Binding Object,",
          "when new workspace was created") do |n|
    optons[:context_mode] = n
  end

원하는만큼 설명 선을 추가하여 옵션을 완전히 설명 할 수 있습니다.



Modified text is an extract of the original Stack Overflow Documentation
아래 라이선스 CC BY-SA 3.0
와 제휴하지 않음 Stack Overflow