質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.35%
Ruby

Rubyはプログラミング言語のひとつで、オープンソース、オブジェクト指向のプログラミング開発に対応しています。

Q&A

解決済

1回答

259閲覧

エラー文を解決したい。

kuromame6145

総合スコア16

Ruby

Rubyはプログラミング言語のひとつで、オープンソース、オブジェクト指向のプログラミング開発に対応しています。

0グッド

0クリップ

投稿2020/09/04 03:19

解決したいこと

 ターミナルでエラー文が表示される。
エラー文詳細
syntax error, unexpected end, expecting end-of-input (SyntaxError)

調べたこと

 endが抜けいることで生じるエラー。

コード

 ```ruby

require 'optparse'

module Todo
class Command
module Options
def self.parse!(argv)
options = {}

sub_command_parsers = create_sub_command_parsers(options) command_parser = create_command_parser begin command_parser.order!(argv) options[:command] = argv.shift sub_command_parsers[options[:command]].parse!(argv) if %w(update delete).include?(options[:command]) raise ArgumentError, "#{options[:command]} id not foud." if argv.empty? options[:id] = Integer(argv.first) end rescue OptionParser::MissingArgument, OptionParser::InvalidOption, ArgumentError => e abort e.message end def create_sub_command_parsers(options) sub_command_parsers = Hash.new do |k, v| raise ArgumentError, "'#{v}' is not todo sub command." end sub_command_parsers['create'] = OptionParser.new do |opt| opt.on('-n VAL', '--name=VAL', 'task name') {|v| options[:name] = v} opt.on('-c VAL', '--content=VAL', 'task content'){|v| options[:content] = v} end sub_command_parsers['list'] = OptionParser.new do |opt| opt.on('-s VAL', '--status=VAL', 'list status') {|v| options[:status] = v} end sub_command_parsers['update'] = OptionParser.new do |opt| opt.on('-n VAL', '--name=VAL', 'update name') {|v| options[:name] = v} opt.on('-c VAL', '--content=VAL', 'update content') {|v| options[:content] = v} opt.on('-s VAL', '--status=VAL', 'update status') {|v| options[:status] = v} end sub_command_parsers['delete'] = OptionParser.new do |opt| end sub_command_parsers end def self.create_command_parser command_parser = OptionParser.new do |opt| sub_command_help = [ {name: 'create -n name -c content', summary: 'Create Todo Task'}, {name: 'update id -n name -c content -s status', summary: 'Update Todo Task'}, {name: 'list -s status', summary: 'List Todo Task'}, {name: 'delete id', summary: 'Create Todo Task'} ] opt.banner ="Usage: #{opt.program_name} [-h|--help] [-v|--version] <command> [<args>]" opt.separator '' opt.separator "#{opt.program_name} Available Commands:" sub_command_help.each do|command| opt.separator [opt.summary_indent, command[:name].ljust(40), command[:summary]].join('') end option.on_head('-h', '--help', 'Show this message') do |v| puts opt.help exit end opt.on_head('-v','--version','Show program version') do |v| opt.version = Todo::VERSION puts opt.ver exit end end end end end end

end
end

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

ruby

1 def self.parse!(argv) 2 options = {} 3 4 sub_command_parsers = create_sub_command_parsers(options) 5 command_parser = create_command_parser 6 7 begin 8 command_parser.order!(argv) 9 options[:command] = argv.shift 10 sub_command_parsers[options[:command]].parse!(argv) 11 12 if %w(update delete).include?(options[:command]) 13 raise ArgumentError, "#{options[:command]} id not foud." if argv.empty? 14 options[:id] = Integer(argv.first) 15 end 16 rescue OptionParser::MissingArgument, OptionParser::InvalidOption, ArgumentError => e 17 abort e.message 18 end

このメソッドを閉じるendがないようです。

投稿2020/09/04 03:24

maisumakun

総合スコア146018

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

kuromame6145

2020/09/04 04:39

このメソッドにendをつけて記述を変更しましたが解決できませんでした。 def self.parse!(argv) options = {} sub_command_parsers = create_sub_command_parsers(options) command_parser = create_command_parser begin command_parser.order!(argv) options[:command] = argv.shift sub_command_parsers[options[:command]].parse!(argv) if %w(update delete).include?(options[:command]) raise ArgumentError, "#{options[:command]} id not foud." if argv.empty? options[:id] = Integer(argv.first) end rescue OptionParser::MissingArgument, OptionParser::InvalidOption, ArgumentError => e abort e.message end end end
maisumakun

2020/09/04 04:39

エラーメッセージは変化しませんか?別なメッセージが出ていますか?
kuromame6145

2020/09/04 04:42

エラー文に変化はないです。
maisumakun

2020/09/04 04:55

今度はendが多いかと思います(rescueはbeginと対応するものなので、ここのインデントがおかしいです)
kuromame6145

2020/09/04 05:02

どこのendが多いですか?
maisumakun

2020/09/04 05:04

self.parse!を閉じるところのendです。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.35%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問