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

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

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

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

Q&A

解決済

3回答

687閲覧

Rubyのcase文とeachメソッドの組み合わせに対する疑問について

退会済みユーザー

退会済みユーザー

総合スコア0

Ruby

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

0グッド

0クリップ

投稿2018/03/26 06:38

こんにちわ。

Rubyでcase文とeachメソッドを使って簡単なコードを2つ書いて見たところ、モヤモヤした疑問が残ったので質問致します。

まず、以下のコードを書いたところ、正常に動きました。

ruby

1product = 3 2 3(1..10).each{|test| 4case product 5when test 6 puts 10-test 7end 8} //7が表示される

しかし、コードを以下に書き換えたところ、エラーが発生してしまいます。

ruby

1product = 3 2 3case product 4(1..10).each{|test| //eachメソッドをcaseの内側に入れる 5when test 6 puts 10-test 7} 8end

私の考えでは、「上記のコードは2つとも同じように動くはず」と思っていたのですが、なぜ、2つ目のコードはエラーになるのでしょうか?

よろしくお願い致します。

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

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

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

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

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

guest

回答3

0

ベストアンサー

Rubyのリファレンスによると、CASEの文法は以下です。

case [式] [when 式 [, 式] ...[, `*' 式] [then] 式..].. [when `*' 式 [then] 式..].. [else 式..] end

2番目は式にはなっていないのでエラーです。

上記のコードは2つとも同じように動くはず

とありますが、2番目はループで判定しているものの集約を判定しようとしているのように見えますので、
そもそも同じような動きではないですよね。

投稿2018/03/26 07:05

編集2018/03/26 07:11
sazi

総合スコア25173

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

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

退会済みユーザー

退会済みユーザー

2018/03/26 09:12

ご回答ありがとうございます。 まだスッキリしない部分がありますが、リンク先のリファレンス等を参考に理解していきます。 ありがとうございました!
guest

0

二例目のコードは確かに文法エラーです。
case文の次にwhen句でない文が入っているためと考えられます。

コードは書いたとおりに(以下略

投稿2018/03/26 06:45

kazto

総合スコア7196

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

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

0

あなたの書きたかったものを推測すると

case product when 1..10 puts 10 - product end

こうなります

投稿2018/03/26 07:47

asm

総合スコア15147

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

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

退会済みユーザー

退会済みユーザー

2018/03/26 09:14

ご回答ありがとうございます。 whenの書き方が参考になりました。 ありがとうございました。
sazi

2018/03/26 09:55

> toumasuxp さん 1番目と同じ動きじゃないことは理解されてますよね? 「productが1~10の時に`10 - product'を出力」ですから、 1番目のように7だけじゃなくてproductの値に左右されます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問