0

Pythonでは、次のようなことができます:

# say.py
class Speaker:
    def speak(self,word):
        pass
    def Do(self):
        self.speak("hello")
Speaker().Do()

これを実行しても、まったく何もしません。別のモジュールでこれを行うことができます:

import say
class Test(say.Speaker):
    def speak(self,word):
        print(word)
Test().Do()

これを実行すると、継承したときに元のspeak関数が完全に上書きされます。say.py

class Test(say.Speaker)

そのため、スクリプトを実行すると、何もしないのではなく単語が出力されます。スクリプトの名前を編集せずにファイル名を動的に変更したいsay.rb.

私が走っsay.pyてやった場合:

Speaker().do()

何も起こりませんが、他の py モジュールを実行すると、次のようになります。

Test.Do()

継承したので上書きし、 の機能を変更しましたspeak。そのままでは何Speaker().Do()もしませんが、私がするTest.Do()と、オーバーライドのために機能します。

それらは私がpythonで行ったことと同等のルビーですか?もしそうなら、どうすればいいですか?

4

2 に答える 2

2

とても似ています。「say.rb」は次のとおりです。

module Say
  class Speaker 
    def speak(word) end
    def Do() speak("Hello") end
  end
end 

他のモジュールで:

require 'say'
class Test < Say::Speaker
  def speak(word)
    puts(word)
  end  
end

デモンストレーションするには:

Test.new.Do
于 2013-10-17T01:43:51.680 に答える