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

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

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

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

Q&A

解決済

2回答

2962閲覧

Rubyのハッシュでカンマの位置によりエラーになるのはどうして?

Mr_Roboto

総合スコア2208

Ruby

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

1グッド

2クリップ

投稿2016/07/24 15:08

すごくつまらない質問ですいません。

Rubyでハッシュを定義するとき、以下は通りますが、

Ruby

1hash1 = { 2 :foo1 => "bar1", 3 :foo2 => "bar2" 4}

カンマの位置を変えるとエラーになります。

Ruby

1hash1a = { 2 :foo1 => "bar1" 3, :foo2 => "bar2" 4}

syntax error, unexpected ',', expecting '}', :foo2 => "bar2"

Ruby1.9から?の新しい書き方でもやはりエラーです。

Ruby

1hash2 = { 2 foo1: "bar1", 3 foo2: "bar2" 4}

Ruby

1hash2a = { 2 foo1: "bar1" 3, foo2: "bar2" 4}

むしろエラーが増えます。
syntax error, unexpected ',', expecting '}', foo2: "bar2"
syntax error, unexpected '}', expecting end-of-input

柔軟な記述を許容するRubyらしくないなと思ってしまったのですが、
何か理由がある動作なのでしょうか?

最初の書き方で書けばいいと言えばそれまでなのですが。
コメントにしやすいという理由で2番めの書き方のほうが好きなのです。

それとも何か勘違していますでしょうか?

ご回答頂ければ幸いです。

環境

Mac OS X El Capitan, Ruby2.3.1

DrqYuto👍を押しています

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

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

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

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

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

otn

2016/07/24 17:06

コメントにしやすいとは具体的にどういう意味ですか?逆にしにくいと思いますが?(1行目をコメントにするとき)
Mr_Roboto

2016/07/25 03:50

1行目以外の話ですね、Rubyは、最後にカンマが残っても良いようですが、SQLとかでは、最後にカンマが残るとエラーになるので、前に置くようにしているのです。1行目の場合も2行目に当たるところの先頭のカンマを外せばいいので、後ろだと項目長さに寄って位置が変わるので。あと前にあるとExcelとかで定義した名前をコピーした後にブロック選択でまとめてカンマ入れられる等自分なりにメリットがあると思っているのです。
otn

2016/07/25 05:44

なるほど。Ruby以外の話ですね。RubyやCはカンマ後ろでいいんじゃないでしょうか。
guest

回答2

0

ベストアンサー

柔軟な記述を許容するRubyらしくないなと思ってしまったのですが、

厳密なところは分かりませんが、Rubyの場合、概ね「改行で切って、そこまでで構文が合うなら切る」というようになっています。
例えば、

Ruby

1(1..10).each 2do |i| p i end

はエラーで、doeachと同じ行にある必要があります。
また、メソッドチェーンで、

Ruby

1foo 2.bar 3.baz

のように、書くとRuby1.8まではエラーになります。ピリオドを次の行に書いてもメソッドチェーンと見なされるようになったのはRuby1.9からですが、逆にこれは、Rubyらしくない変更だと思っています。まあ、見やすいのでたまに使いますが。

投稿2016/07/25 06:04

otn

総合スコア84505

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

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

Mr_Roboto

2016/07/25 12:34

ご回答ありがとうございます。 なるほど、そうなのですね。 まだ初学者なので、どうしても他のものと比べてしまいますが、 そのような文化だと理解していくしか無いですね。
otn

2016/07/25 14:14

> そのような文化だと理解していくしか無いですね。 「行末のセミコロンは省略可」の代償ですね。 JavaScriptもセミコロン省略可のケースがありますが、こっちは「次の行と継続してそこで構文が合うならつなげる」なので省略すると危険です。
guest

0

この辺の議論が参考になるのではないでしょうか
https://www.ruby-forum.com/topic/212704

投稿2016/07/24 15:20

Kuchitama

総合スコア181

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

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

Mr_Roboto

2016/07/24 15:34

早々にご回答ありがとうございます。 英語ですね ^_^; 一応、機械翻訳して読んでみましたが、いまいちピンときません。 パーサーの都合なのでしょうか。(読解力不足ですいません) 噛み砕いた優しいご回答を引き続きお待ちいたしております。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問