私のコードを静的に解析できるようにしたい。つまり、すべての関数と変数が入っているファイルのプレーンテキストから知ることです。 IDEやテキストエディタプラグインは、すべてのシンボルの起源をトレースすることができれば、より効果的です。私はこのようなアプリケーションコードがある場合Rubyにサブモジュールやクラスを明示的に含めることは可能ですか?
だから、たとえば、:
#...
Y.some_method()
#...
をそれから私は、どこかのページに含ま/インポート/必要/拡張/ DEF文でY
を見てみたいです。
私が使用する他の言語では、名前空間のどの部分を現在のコンテキストに持ち込むかを明示的に選択できます。
from X import Y
ハスケル:
import X (Y)
エリクサー:
alias X.Y, as: Y
そして、それはイムすることが可能ですしばらくのPython
from X import *
」:ポートすべては、Python、 "ワイルドカードのインポート" is frowned uponに名前を含んでいました。 。 。彼らは読者と多くの自動化ツールの両方を混乱させ、名前空間に存在する名前それが不明確にします。ワイルドカード 『のように持って来るために唯一の方法である」
をRubyでは、この完全に暗黙のようです』含ま名前:
はinclude X
これはY
利用できるようになりますが、これを明示的にいくつかの方法がありdocs for Ruby include
は、任意のオプションを示していない私は本当にRubyでやってみたい何
が何かあります?。 1つのようにこれらのF:
from X include Y
include X::Y as Y
私がこれまでに作ってみた最高のは、次のとおりです。
require 'x/y' ; Y = X::Y
はここでこれを可能にする別の質問への答えでa crazy hackです。
のファイルの場所とソースコードを印刷しますここのRubyのすべての言語には独自のスタイルがあり、Rubyは常にフォーマル性よりも利便性に傾いています。 Rubyはコードのあらゆる部分が貢献する単一のグローバルな名前空間を持っているので、何かがどこから来たのかを特定することは必ずしも実用的ではありません。 *ローマの時*の原則がここに当てはまります:RubyをやっているときにRubyのやり方をしてください。 PythonやNode.jsではそうです。穀物に向かうのは、Pythonのように動作するRubyの奇妙な方言のように、あなたがいかに不自然で、維持できないコードを作成するかです。 – tadman
@tadmanメソッド呼び出しのように見えるシンボルが表示され、それを変更したいときはどうしますか?私の場合、それは 'log(...)'でした。それは私の方法であったかもしれませんが、それは標準的な図書館のものだったかもしれません、それはいくつかの宝石から来たかもしれません...私は古いコードに戻っていました、 dはコードがどこから来ているかを少なくとも知っています。 ? – Dogweather
@Dogweather:Ruby: 'method(:log).owner'に尋ねることができます。ところで、あなたは 'include'が何をするのかについて基本的な誤解を持っているようです。特に、あなたはそれがいくつかのモジュールシステムの一部だと考えるようです。そうではない。これはRubyのmixinシステムの一部です。言い換えれば、すべての 'クラスC; 'M''を含む' 'C''のスーパークラスを作成します。 –