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

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

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

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

Ruby on Rails

Ruby on Railsは、オープンソースのWebアプリケーションフレームワークです。「同じことを繰り返さない」というRailsの基本理念のもと、他のフレームワークより少ないコードで簡単に開発できるよう設計されています。

Q&A

1回答

3035閲覧

Railsのメソッド呼び出しについて

pinokio

総合スコア32

Ruby

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

Ruby on Rails

Ruby on Railsは、オープンソースのWebアプリケーションフレームワークです。「同じことを繰り返さない」というRailsの基本理念のもと、他のフレームワークより少ないコードで簡単に開発できるよう設計されています。

0グッド

0クリップ

投稿2015/11/15 16:28

rubyでは、メソッドは呼び出すよりも前に定義するというルールがあったと思うのですが、以下の様なコードでメソッドが呼び出せるのはなぜなのでしょうか?

ruby

1def create 2 Hoge.create(hoge_params) 3end 4 5private 6def hoge_params 7 params.permit(:name, :text, :image) 8end

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

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

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

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

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

guest

回答1

0

メソッドの定義が読み込まれるとき、定義だけがされて中身のそれぞれの式については(文法的な間違いを除き)確認しません。なので、後から定義したメソッドが定義の中身の方で呼び出されても、問題ないのです。単純な下記のコードを考えてみてください。

Ruby

1def hoge # …1 2 fuga # …4 3end 4def fuga # …2 5 puts "fuga" # …5 6end 7hoge # …3

このときRubyは以下のような処理をします。

  1. hogeメソッドが定義されます。中でどんなメソッドが呼び出されているかは確認しません。
  2. fugaメソッドが定義されます。中でどんなメソッドが呼び出されているかは確認しません。
  3. hogeメソッドが呼ばれます。
  4. hogeメソッド内を一行一行評価します。その結果fugaメソッドがあったのでこれを呼び出します。fugaメソッドは2.で定義済みなので、エラーになりません。
  5. fugaメソッド内を一行一行評価します。puts "fuga"とあったので、fugaを表示します。

なお、このコード例では、最後のhogeを先頭行に持ってくると、hogeメソッドが未定義なので、エラーになります。

投稿2015/11/15 22:27

raccy

総合スコア21735

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問