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

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

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

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

Q&A

解決済

1回答

2601閲覧

配列の要素にメソッドを当てることはできないのでしょうか

ruby_rookie

総合スコア15

Ruby

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

0グッド

0クリップ

投稿2017/05/21 02:50

###前提・実現したいこと
配列の要素にメソッドを格納して、メソッド配列なるものを作成したいです。
しかしながら、配列の要素にメソッドを格納したのにもかかわらず、randメソッドが無視されて?
2つのメソッドが実行されてしまいます。
配列の要素にメソッドを当てることはできないのでしょうか

###発生している問題・エラーメッセージ

エラーは特にありません

###該当のソースコード

Ruby

1def greeting1 2 print "おはよう!\n" 3end 4 5def greeting2 6 print "今日はさわやかですね\n" 7end 8 9processing=[greeting1, greeting2] 10 11processing[rand(0..1)]

###試したこと
インターネットで検索などしてみましたが、配列の要素を検索したり、加工したりする項目はヒット
しますが、配列の要素にメソッドをあてる記事は見つかりませんでした(検索が甘かったらすみません)

###補足情報(言語/FW/ツール等のバージョンなど)
より詳細な情報
Ruby2.3.3

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

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

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

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

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

guest

回答1

0

ベストアンサー

配列の要素にメソッドを格納したのにもかかわらず、randメソッドが無視されて?

Rubyはメソッド呼び出しの括弧を省略できるという特性を持っています。これ,裏を返せばメソッド名を書いただけで実行されちゃうってことです。なのでそもそも格納されているのはメソッドではなくメソッドの実行結果の返り値です。printの返り値はnilなのでそれが格納されていますね。

メソッドは「シンボル」あるいは「Methodオブジェクト」(シンボルから変換する)として保持します。


メソッド名をシンボルとして保持する例

ruby

1def greeting1 2 puts "おはよう!" 3end 4 5def greeting2 6 puts "今日はさわやかですね" 7end 8 9method_names = [:greeting1, :greeting2] 10 1120.times { send method_names.sample }

メソッドをMethodオブジェクトとして保持する例

ruby

1def greeting1 2 puts "おはよう!" 3end 4 5def greeting2 6 puts "今日はさわやかですね" 7end 8 9methods = [:greeting1, :greeting2].map &method(:method) 10# &method(:method) は {|x| method x} と等価 11 1220.times { methods.sample[] } 13# メソッドオブジェクトを実行するには .call または .() または [] を使う 14# すべて等価

投稿2017/05/21 03:08

編集2017/05/21 03:33
mpyw

総合スコア5223

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

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

ruby_rookie

2017/05/21 06:55

詳細な説明ありがとうございます。メソッドも配列化できるとわかったのでよかったです。また、randメソッドを使わなくてもsampleメソッドのような配列要素を得る方法も知ることができました。感謝します。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問