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

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

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

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

Ruby

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

Ruby on Rails

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

RubyMine

RubyMineは、Ruby/Ruby on RailsベースのWebアプリケーション開発を行うためのIDEです。コードエディタやコードアシスタンス、グラフィカルなデバッガを搭載しており、様々なバージョン管理システムに対応しています。

Q&A

2回答

2386閲覧

Railsである関数がどこで定義されているか知る方法,動的な言語で関数の定義を知る方法

退会済みユーザー

退会済みユーザー

総合スコア0

Ruby on Rails 5

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

Ruby

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

Ruby on Rails

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

RubyMine

RubyMineは、Ruby/Ruby on RailsベースのWebアプリケーション開発を行うためのIDEです。コードエディタやコードアシスタンス、グラフィカルなデバッガを搭載しており、様々なバージョン管理システムに対応しています。

0グッド

0クリップ

投稿2018/07/10 05:07

RailsのGitHub

ruby

1namespaces = subclasses.index_by(&:namespace)

があります。

ruby

1&:namespace

の定義を知りたいのですが、RubyMineでGo to Declarationすると候補が15個もでてきてわかりません。
デバッガで実行してみれば良いのでしょうが面倒くさいです。
このコードを書いた人はどの&:namespaceか知ってるでしょう。
何故IDEではそれが分からず名前で検索してしまうのでしょうか。
rubyは動的?だからどの関数になるか分からないとはいえコードを書いた人はどの&:namespaceを呼び出すか意図がありますよね。

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

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

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

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

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

退会済みユーザー

退会済みユーザー

2018/07/10 06:51

やってほしいことだけを記載した丸投げの質問www どこがwww
guest

回答2

0

どの&:namespaceを呼び出すか意図が

あるとは限りません。
Rubyはダックタイピングできる言語なのでnamespaceメソッドを提供しているオブジェクトならばなんでもいいです。

そういう自由な言語のため、静的解析には限界があり動的解析に頼らざるを得ない場面があります。


ついでに&:namespaceブロック付きメソッド呼び出し
シンボル:namespaceを暗黙の変換でProcオブジェクトに変換したものを渡す構文ですので

どれが呼ばれているか? と言うと、:namespace.to_procという事になります。

投稿2018/07/10 06:34

asm

総合スコア15147

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

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

退会済みユーザー

退会済みユーザー

2018/07/10 06:50

あるとは限らないけどこの場合は意図がありますよね。 絶対ありますよ。
退会済みユーザー

退会済みユーザー

2018/07/10 06:55

このコード書いた人はここでどの外部ファイルのnamespaceを呼ぶかは分かって書いてますよね ダックタイピングで何でもokなんて思ってないはずです
asm

2018/07/10 07:09

コマンドの作成なんてのはダックタイピングの真骨頂の一つです
退会済みユーザー

退会済みユーザー

2018/07/10 07:20

貴方が適当に読みといて関数の定義を特定できるのにIDEさんができないのはなんでなんですか? >コマンドの作成なんてのはダックタイピングの真骨頂の一つ これは聞いたことがないですね どこに理由が書いてありますか?
asm

2018/07/10 08:34

私は機械と違ってドキュメントコメントが読めます。 それによってsubclassesメソッドが自クラスを継承した子クラスを配列で返す事が分かります。 あとはRails::Commandを継承しているかつnamespaceメソッドがあるクラスを探すだけ コマンドパターンにダックタイピングが適しているというのは経験則ですね シンボルにto_procメソッドがあるから、&:namespaceでブロックを渡せるというのも コマンドパターンとダックタイピングを併用している例じゃないかな
退会済みユーザー

退会済みユーザー

2018/07/10 11:10

> 貴方が適当に読みといて関数の定義を特定できるのにIDEさんができないのはなんでなんですか? faoはさ、いつも答え自分で出してるのになんで分かってないフリするん? 近所のパン屋のパンがまずかったら、そりゃ、そのパン屋の腕が悪いからにきまってんじゃん。 そしたら、そのパン屋に「もっと腕磨け」って言うか、別のパン屋でパン買うしかないじゃん。 なんで他人に、「あのパン屋のパンはなんでまずいんですか?」って聞くん? 聞いてどうするん?
退会済みユーザー

退会済みユーザー

2018/07/10 11:15

だってそういうIDE知らないんだもん。 おいしいパン屋さん探してるの。
退会済みユーザー

退会済みユーザー

2018/07/10 11:27

まぁ、Rubyのパン屋、どこも不味いぞ。 他の言語ってだいたい「これ」っていうIDEが場合によっては2、3個もあったりするんだけど、 Rubyは壊滅状態。 思うに、あいつらってEmacsとかVim使ってぐへぐへ言いながら宗教戦争してるオタクばっかだからIDEのニーズが無いんだろ。 NetBeansのRubyプラグインとか7あたりでサポート終了して今はコミュニティでほそぼそとメンテしてるけど、不便すぎて泣けて来るからな。
guest

0

pryは利用していますでしょうか?

https://qiita.com/silmisilon/items/8e08435204d8d08d09ff

これを入れるとbinding.pryで好きなところでプログラムを止めて、デバッギングできます。自分のローカルで対象のファイルを見つけ、下記のように編集します。

rb

1binding.pry 2namespaces = subclasses.index_by(&:namespace)

といれ、サーバーを再起動し実行すると、対象の場所で止まってログのところが入力モードになります。ここでstepして見ていくのですが、この場合stepした時にindex_byに入るので、まどろっこしいから、下記のようにコードを変更して試すと手っ取り早いです。

rb

1 2sc = subclasses.first 3binding.pry 4subclasses.namespace

ここでstepすれば、namespaceの実装にすぐ入れます。デバッガーにはファイル名も出ますので、そこでどのファイルの何行目かもわかります。

繰り返しになりますが、railsのソースをいじった時はサーバー再起動しないと反映されないので注意を。

pryの詳しい使い方は上記のQiitaもありますが、検索するといっぱい出てきますので活用ください。

投稿2018/07/10 05:34

編集2018/07/10 05:35
gomo

総合スコア27

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

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

退会済みユーザー

退会済みユーザー

2018/07/10 05:44

それが面倒臭いって言ってんだよ
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

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

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

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問