Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

onメソッドのショートオプションが引数を取る場合について #2638

Open
sugiwe opened this issue Jan 2, 2022 · 4 comments · May be fixed by #2658
Open

onメソッドのショートオプションが引数を取る場合について #2638

sugiwe opened this issue Jan 2, 2022 · 4 comments · May be fixed by #2658

Comments

@sugiwe
Copy link

sugiwe commented Jan 2, 2022

https://docs.ruby-lang.org/ja/latest/method/OptionParser/i/on.html

ショートオプションが引数をとる場合は、
on("-x MANDATORY"){|val| ...}
となります。"MANDATORY" の部分は任意の文字列で構いません。

とありますが、on("-x:"){|val| ...}のように直後に ":" を付ける形でも引数を取れるようです。(ショートオプションのみ)

例えば以下のように ":" に関する言及も付けてはいかがでしょうか?

ショートオプションが引数をとる場合は、
on("-x MANDATORY"){|val| ...}
on("-x:"){|val| ...}
となります。"MANDATORY" の部分は任意の文字列で構いません。直後に ":" を付けてもオプションが引数を取ることができます。

尚、上記の追記箇所は下記のgetopsメソッドでの書き方も参考にしました。
https://docs.ruby-lang.org/ja/latest/method/OptionParser=3a=3aArguable/i/getopts.html

@universato
Copy link
Contributor

自分が試したところ、直後につけるのは":"に限らず、何の文字を書いても、引数が必要な形になるように思いました。
OptParseのバージョンは、0.1.0です。

require 'optparse'
opt = OptionParser.new

opt.on('-a&') {|v| p v }

opt.parse!(ARGV)
p ARGV

p OptParse::Version #=> "0.1.0"

@sugiwe
Copy link
Author

sugiwe commented Jan 4, 2022

ありがとうございます。また、検証不足で申し訳ありません。
おっしゃる通りなんの文字を書いても同じ結果になりました。

opt.on('-a') {|v| p v } # 引数を取らない

# 以下、全て引数を取る
opt.on('-a MANDATORY') {|v| p v } # リファレンスに載っている例
opt.on('-a&') {|v| p v } #記号やアルファベットなど任意の1文字
opt.on('-aaaaahoge') {|v| p v } #任意の文字列
opt.on('-a ') {|v| p v } # スペース1つのみでも同様

改めてリファレンス確認したところ、以下のoptparseライブラリページに該当していると思われる記述がございました。
https://docs.ruby-lang.org/ja/latest/library/optparse.html#optionarg

OptionParser#on メソッドのオプション定義で末尾に何かを書くと、そのオプションは引数を受け付けることの指定となります。

「何か」なので、":"に限らず任意の文字(文字列)でもスペース1つでも良いということですね。
早とちりしてしまい":"のみが引数を取れる形になると勘違いしておりました、失礼しました…!

@universato
Copy link
Contributor

onメソッド自体の説明で、半角スペース等をあける必要がなく何の文字でもいいことを厳密に説明されてた方がいいのかもしれないですね

@sugiwe
Copy link
Author

sugiwe commented Jan 6, 2022

ありがとうございます、確かに、現状のopt.on('-a MANDATORY') {|v| p v }という書き方から、「半角スペース+任意の文字列」が必須のように受け取ってしまいました。

library optparseの「オプションの引数」 の後半で「ヘルプの見栄えが良くなるように書く」という説明もありますので、「なんの文字でも良いけど、ヘルプの見栄えが良くなるように"半角スペース+わかりやすい文字列"にするのが望ましい」、ということではあると思いますが、そのことも含めて、別ページの instance method OptionParser#on の方と記述内容が揃っているとわかりやすいかもしれないと思いました。

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
2 participants