Ruby Language
OptionParser
수색…
소개
OptionParser 는 ARGV
명령 행 옵션을 구문 분석하는 데 사용할 수 있습니다.
필수 및 옵션 명령 행 옵션
너는 너무 복잡한 것을 찾지 않으면 손으로 명령 행을 파싱하는 것이 상대적으로 쉽다.
# 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