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

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

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

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

Q&A

解決済

3回答

4542閲覧

ブロック内で宣言した変数をブロック外で参照するには

yuki_90453

総合スコア326

Ruby

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

0グッド

1クリップ

投稿2017/02/09 13:54

いつもお世話になっております。
下記のようにeachのブロック内で代入した変数をブロック外で参照する際、eachを使用する前に変数を宣言しそこへ代入という形をとってきました。
この変数宣言を省略してブロック外から参照出来るようにする事は可能でしょうか?

#下記のarryを省略して、外部からこのarryを参照する方法はありますか? #arry = [] ["drink","food","wear"].each {|i| arry << i }

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

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

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

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

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

guest

回答3

0

不可能です。
しかし、なんか美しくない。

なので、1.9以降のRubyではこう書きます。

Ruby

1arry = ["drink","food","wear"].each_with_object([]) {|i,o| o << i}

投稿2017/02/09 14:05

otn

総合スコア84499

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

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

0

ベストアンサー

each_with_object が紹介されていますが、こんなのは如何でしょう。

http://ref.xaio.jp/ruby/classes/enumerable/each_with_object に紹介されている例を別の方法でかいてみました。

ruby

1$ irb 2irb(main):001:0> scores = { 'Carol' => 90, 'Alice' => 50, 'David' => 40, 'Bob' => 60 } 3=> {"Carol"=>90, "Alice"=>50, "David"=>40, "Bob"=>60} 4 5irb(main):002:0> names = scores.each_with_object([]) { |(key, val), arr| arr << key if val >= 60 } 6=> ["Carol", "Bob"] 7 8irb(main):003:0> names = scores.map { |key, val| key if val >= 60 }.compact 9=> ["Carol", "Bob"]

投稿2017/02/09 15:00

katoy

総合スコア22324

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

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

yuki_90453

2017/02/09 22:50

なるほど!処理事体を変数に入れてしまうんですね、これなら綺麗に書けそうです。
guest

0

Ruby

1(["drink","food","wear"] << "").inject{|e, ee| @arry = [e, ee].flatten}.pop rescue @arry 2p @arry

こんなのとかどうでしょう?

投稿2017/02/09 14:48

編集2017/02/09 16:40
退会済みユーザー

退会済みユーザー

総合スコア0

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問