Gunakan OptionParser untuk Parse Perintah di Ruby

click fraud protection

Dalam artikel yang membahas fitur-fitur OptionParser kami membahas beberapa alasan yang membuat penggunaan OptionParser di Rubi lebih baik melihat melalui ARGV secara manual daripada parse perintah dengan tangan. Sekarang saatnya untuk mempelajari cara menggunakan OptionParser dan fitur-fiturnya.

Kode boilerplate berikut akan digunakan untuk semua contoh dalam tutorial ini. Untuk mencoba salah satu contoh, cukup masukkan contoh opt.on blokir di sebelah komentar TODO. Menjalankan program akan mencetak status opsi dan ARGV, memungkinkan Anda untuk memeriksa efek dari sakelar Anda.

#! / usr / bin / env ruby
membutuhkan 'optparse'
membutuhkan 'pp'
# Hash ini akan menampung semua opsi
# diuraikan dari baris perintah oleh
# OptionParser.
options = {}
optparse = OptionParser.new do | opts |
# TODO: Letakkan opsi baris perintah di sini
# Ini menampilkan layar bantuan, semua program
# diasumsikan memiliki opsi ini.
opts.on ('-h', '--help', 'Tampilkan layar ini') lakukan
menempatkan opts
keluar
akhir
akhir
# Pisahkan baris perintah. Ingat ada dua bentuk
instagram viewer

# dari metode parse. Metode 'parse' hanya mem-parsing
# ARGV, sementara 'parse!' metode mem-parsing ARGV dan menghapus
# opsi apa pun yang ditemukan di sana, serta parameter apa pun untuk
# opsi. Yang tersisa adalah daftar file yang akan diubah ukurannya.
optparse.parse!
"Opsi:", opsi
pp "ARGV:", ARGV

Switch sederhana

Peralihan sederhana adalah argumen tanpa bentuk opsional atau tanpa parameter. Efeknya adalah dengan hanya mengatur bendera di opsi hash. Tidak ada parameter lain yang akan diteruskan ke di metode.

options [: simple] = false
opts.on ('-s', '--simple', "Argumen sederhana") lakukan
options [: simple] = true
akhir

Beralih dengan Parameter Wajib

Switch yang mengambil parameter hanya perlu menyatakan nama parameter dalam bentuk panjang switch. Sebagai contoh, "-f", "--file FILE" berarti switch -f atau --file mengambil parameter tunggal bernama FILE, dan parameter ini wajib. Anda tidak dapat menggunakan -f atau --file tanpa melewatkannya sebagai parameter.

pilihan [: mand] = ""
opts.on ('-m', '- FILE wajib', "Argumen wajib") lakukan | f |
opsi [: mand] = f
akhir

Beralih dengan Parameter Opsional

Ganti parameter tidak harus wajib, mereka bisa opsional. Untuk mendeklarasikan parameter sakelar opsional, letakkan namanya dalam tanda kurung di deskripsi sakelar. Sebagai contoh, "--logfile [FILE]" berarti parameter FILE adalah opsional. Jika tidak disediakan, program akan menganggap default waras, seperti file yang disebut log.txt.

Dalam contohnya, idiom a = b || c digunakan. Ini hanya singkatan untuk "a = b, tetapi jika b salah atau nil, a = c".

options [: opt] = false
opts.on ('-o', '--optional [OPT]', "Argumen opsional") lakukan | f |
opsi [: opt] = f || "tidak ada"
akhir

Konversi ke Float secara otomatis

OptionParser dapat secara otomatis mengonversi argumen ke beberapa jenis. Salah satu dari jenis ini adalah Float. Untuk secara otomatis mengonversi argumen Anda menjadi pengalih ke Float, berikan Float ke di Metode setelah string deskripsi sakelar Anda.

Konversi otomatis berguna. Mereka tidak hanya menghemat langkah Anda untuk mengubah string ke jenis yang diinginkan, tetapi juga memeriksa format untuk Anda dan akan membuang pengecualian jika diformat secara tidak benar.

opsi [: float] = 0,0
opts.on ('-f', '--float NUM', Float, "Konversikan ke float") lakukan | f |
options [: float] = f
akhir

Beberapa jenis lain yang dapat dikonversi oleh OptionParser secara otomatis termasuk Waktu dan Integer.

Daftar Argumen

Argumen dapat diartikan sebagai daftar. Ini dapat dilihat sebagai konversi ke array, saat Anda dikonversi ke Float. Sementara string opsi Anda dapat menentukan parameter yang disebut "a, b, c", OptionParser akan membolehkan sejumlah elemen secara membabi buta dalam daftar. Jadi, jika Anda membutuhkan sejumlah elemen tertentu, pastikan untuk memeriksa sendiri panjang array.

options [: list] = []
opts.on ('-l', '- daftar a, b, c', Array, "Daftar parameter") do | l |
options [: list] = l
akhir

Set Argumen

Terkadang masuk akal untuk membatasi argumen untuk beralih ke beberapa pilihan. Misalnya, sakelar berikut hanya akan mengambil satu parameter wajib, dan parameternya harus salah satu Iya, tidak atau mungkin. Jika parameternya adalah hal lain, pengecualian akan diberikan.

Untuk melakukan ini, berikan daftar parameter yang dapat diterima sebagai simbol setelah string deskripsi switch.

options [: set] =: yes
opts.on ('-s', '--set OPT', [: ya,: tidak,: mungkin], "Parameter dari set") do | s |
opsi [: set] = s
akhir

Formulir Negasi

Switch dapat memiliki bentuk negasi. Tombol --negated dapat memiliki satu yang melakukan efek sebaliknya, yang disebut --tidak dinegasikan. Untuk menggambarkan ini dalam string deskripsi sakelar, tempatkan porsi alternatif dalam tanda kurung: - [tidak-] dinegasikan. Jika formulir pertama ditemukan, true akan dikirimkan ke blok, dan false akan diblokir jika formulir kedua ditemukan.

options [: neg] = false
opts.on ('-n', '- [no-] negated', "Negated form") lakukan | n |
opsi [: neg] = n
akhir
instagram story viewer