2017-02-17 7 views
0

1つのクラスに複数のクラスを含む1つのプログラムを作成しましたが、各サブクラスごとに1つずつ複数のプログラムに分割する方が効率的です。これは私のコードを整理するためのより良い方法でしょうか?これがパフォーマンスや何かに影響しますか?継承のある異なるファイルのネストされたクラス

このコードを2つのファイルに分割するにはどうすればよいですか?メインプログラムはTextyクラスを持っていて、別のファイルからStringクラスをどういう形でインクルードする必要がありますが、Rubyにクラスを含めることはできないので、これをどのようにしてTextyから継承していますか?そして、他のファイルからインスタンス変数@inst_varにアクセスするにはどうすればよいですか?

class Texty 
    def initialize 
    @inst_var = 0 
    end 
    def texty_method 
    puts 'Bar' 
    end 
    class String < Texty 
    def output(string) 
     puts string 
    end 
    end 
end 

Texty::String.new.output('Foo') 
+0

このようなネストクラスは、TextyとStringの間に何らかの種類の関係を作成しません。あなたはStringクラス(私はこれのために別の名前を選ぶだろう)を独自のファイルに引っ張り、宣言の直前にTextyを必要とし、あなたが今得ているのと同じ結果を維持することができます。 –

+0

まあ... Texty名前空間の外でStringを参照しているので、まったく同じではありませんが、画像があると思います。 –

+0

この方法でTextyのインスタンス変数に引き続きアクセスできますか? (文字列から) –

答えて

0

コードを複数のファイルとオブジェクトに分割すると、パフォーマンスが低下しますが、それほど気付かないこともあります。

プログラムをクラス別に分割する場合は、レール命名規則を使用することをお勧めします。

TestClass - >test_class.rb

次に、あなたのメインプログラムの先頭で行いますrequire_relative 'test_class.rb'

0

は次のようにファイルを分割してみて、何が起こるかを参照してください。 texty/texty.rb

texty/string.rb
class Texty 
    def initialize(x) 
    @x = x 
    end 
end 

require_relative 'texty.rb' 

class Texty 
    class String < Texty 
    def test 
     puts @x 
    end 
    end 
end 

次にコマンドラインから実行:

$ ruby -r ./texty/string.rb -e "Texty::String.new(1).test" 

それはあなたのTexty::Stringクラスが継承されたことを示す、1を印刷する必要がありますtの初期化彼の親クラスのTextyから彼@x ivar。

関連する問題