của Ruby built-in OptionParser làm điều này độc đáo. Kết hợp nó với OpenStruct và bạn ở nhà miễn phí:
require 'optparse'
options = {}
OptionParser.new do |opt|
opt.on('--first_name FIRSTNAME') { |o| options[:first_name] = o }
opt.on('--last_name LASTNAME') { |o| options[:last_name] = o }
end.parse!
puts options
options
sẽ chứa các thông số và giá trị như một băm.
tiết kiệm và chạy mà tại dòng lệnh không có tham số kết quả trong:
$ ruby test.rb
{}
Chạy nó với các thông số:
$ ruby test.rb --first_name=foo --last_name=bar
{:first_name=>"foo", :last_name=>"bar"}
Đó dụ đang sử dụng một Hash để chứa các tùy chọn, nhưng bạn có thể sử dụng một OpenStruct đó sẽ dẫn đến việc sử dụng như yêu cầu của bạn:
require 'optparse'
require 'ostruct'
options = OpenStruct.new
OptionParser.new do |opt|
opt.on('-f', '--first_name FIRSTNAME', 'The first name') { |o| options.first_name = o }
opt.on('-l', '--last_name LASTNAME', 'The last name') { |o| options.last_name = o }
end.parse!
puts options.first_name + ' ' + options.last_name
$ ruby test.rb --first_name=foo --last_name=bar
foo bar
tôi thậm chí không tự động tạo -h
hoặc --help
bạn lựa chọn:
$ ruby test.rb -h
Usage: test [options]
--first_name FIRSTNAME
--last_name LASTNAME
Bạn có thể sử dụng lá cờ ngắn quá:
require 'optparse'
options = {}
OptionParser.new do |opt|
opt.on('-f', '--first_name FIRSTNAME') { |o| options[:first_name] = o }
opt.on('-l', '--last_name LASTNAME') { |o| options[:last_name] = o }
end.parse!
puts options
Chạy rằng thông qua tốc độ của nó:
$ ruby test.rb -h
Usage: test [options]
-f, --first_name FIRSTNAME
-l, --last_name LASTNAME
$ ruby test.rb -f foo --l bar
{:first_name=>"foo", :last_name=>"bar"}
Thật dễ dàng để thêm lời giải thích inline cho các tùy chọn:
OptionParser.new do |opt|
opt.on('-f', '--first_name FIRSTNAME', 'The first name') { |o| options[:first_name] = o }
opt.on('-l', '--last_name LASTNAME', 'The last name') { |o| options[:last_name] = o }
end.parse!
và:
$ ruby test.rb -h
Usage: test [options]
-f, --first_name FIRSTNAME The first name
-l, --last_name LASTNAME The last name
OptionParser cũng hỗ trợ chuyển đổi các tham số để một kiểu, chẳng hạn như một Integer hoặc một mảng. Tham khảo tài liệu để biết thêm các ví dụ và thông tin.
Bạn cũng nên xem xét các câu hỏi liên quan đến danh sách quyền:
https://www.ruby-toolbox.com/categories/CLI_Option_Parsers –
Nếu tôi không nhầm, Highline có vẻ l ike helper chức năng để yêu cầu người dùng cho đầu vào. Vì vậy, tôi sẽ sử dụng Highline để có giao diện điều khiển của tôi nói 'First Name: 'và chờ đợi đầu vào của họ. Có một chức năng cụ thể tôi nên nhìn vào nó? –
Có nhiều loại đá quý bạn có thể chọn; trang web đó phân loại các thư viện và sắp xếp chúng theo mức độ phổ biến. Tôi thậm chí đã viết gem của riêng mình, được gọi là 'acclaim', và nó hỗ trợ cú pháp' --option = value'. Tuy nhiên, tôi không có thời gian để duy trì các dự án phần mềm miễn phí của mình. Bạn nên chọn một thư viện được hỗ trợ tốt hơn. –