0

私がC#開発でよく知っているコード補完と比較すると、RubyMineによって提供されるコード補完は驚くほど不完全であることがわかります。

  1. いくつかのメソッドを使用してクラスを作成し、それらを別のクラスから呼び出したい場合、
    「1マイル」のような長さのコード完了リストを取得するのに、関連するメソッドの提案が含まれていないのはなぜですか。
    (または、これは私のRubyMineのバグ/機能ですか?!)

  2. 「deliver_*」メソッドのようなメソッドをActionMailer 魔法のように生成するようないくつかのクラス(このを参照)...コードの完了ではそれらが表示されないので、それらが存在することをどのように知る必要がありますか?
    (残念ながら、現時点でもエラーが発生します。そのdeliver_contactメソッドは存在しません...例から完全にコピーしたので、この機能がまだ存在するかどうかを自問しています8 [)

これらの問題を解決する方法はありますか?

4

3 に答える 3

5

Rubyがコード補完で使用するように「設計」されていないわけではありません。プログラムの実行中など、さまざまな方法で動作を追加できるということです。これにより、コードの完成が困難になります。RubyMineは優れた機能を果たしますが、オブジェクトのタイプがわかっている場合にのみ、明らかな機能または既知の機能に対してのみ機能します。

http://apidock.comは、Ruby、Rails、およびRSpecのリファレンス資料を提供しています。irb/ pryで遊んでみると大いに役立ちます。REPLで評価することにより、クラス/インスタンスのメソッドをいつでも取得できますfoo.methods(ほとんどの場合foo.methods.sort)。

find / grepで探しているものが「ある程度」わかっている場合は、そのリストをフィルタリングできます。

> "foo".class.instance_methods(false).sort.grep /each/
=> [:each_byte, :each_char, :each_codepoint, :each_line]

Rails環境では、実行するrails consoleと(コンソールにはpry、YMMVを使用することをお勧めします)、多くの動的メソッドを公開するなど、環境にアクセスできます。一部のメソッド(特にfind_by_foo_and_barさまざまなメソッド)は、最初に呼び出されるまで存在しないため、一部の機能はまだ非表示になっている可能性があることに注意してください。

于 2011-10-22T18:55:30.693 に答える
0

これらの問題が発生する主な理由は、Ruby(onRails)がコード補完で使用されるように設計されていないことです。ほとんどのRubyistコードはテキストエディタであり、コードを完成させる必要がないことを非常に喜んでいます。

Railsの現在のバージョンでは、deliver_*メソッドは廃止されてMyClass.contact.deliverスタイルが優先されます。

于 2011-10-22T18:48:03.627 に答える
0

次の構造に従うすべてのメソッド:deliver_*はメタプログラミング哲学を使用しています。

非常に簡単な例を次に示します。Ruby:define_method vs. def

Railsの多くのものは、メソッドの欠落とメタプログラミングの哲学に関係していることがわかります。

于 2011-10-22T18:53:39.697 に答える