2013-09-21 51 views
-1

好吧,我有一個關於如何在ruby中做些事情的問題。我有一個python示例來展示我要做什麼,所以在這裏。如何覆蓋Ruby中的實例方法

class TestScript: 
     def say(word): 
      pass 
     def x(): 
      self.say("hello") #right now it will pass 

因此,可以說該模塊被稱爲「tester.py」,但現在,在另一個模塊中我們現在可以做到這一點:

import tester 
class doScript(tester.TestScript): 
     def say(word): 
      return word #now its overrided so in this current module it will return it rather pass it 

現在傳遞先前說DEF被作廢新的一個,所以現在如果有東西被傳遞說它會返回而不是通過它。有沒有辦法在ruby中做到這一點?感謝

+1

Ruby的'require'與Python的'import'大致相似。 Ruby確實允許一個類從另一個類繼承。同時在互聯網上搜索「mixins」,以查看Ruby中繼承的替代方案。 – FMc

+0

@FMc我編輯我的問題,如果你想再給它一次,我也看着mixins,但我不能找到任何關於如何從另一個文件做它,你能告訴我嗎?但是我希望我編輯這個問題是爲了讓它更具意義,如果它太混亂 – anakin

回答

2

下面是包含三個文件的示例:animal.rbdog.rbscript.rb

# animal.rb 
# Our base class. 
class Animal 
    def speak 
    puts 'click-click' 
    end 
    def eat 
    puts 'chomp-chomp' 
    end 
end 

# dog.rb 
# Dog inherits from Animal, but we override the speak() method. 
require 'animal' 

class Dog < Animal 
    def speak 
    puts 'woof-woof' 
    end 
end 

# script.rb 
# Demo script. 
require 'dog' 

d = Dog.new 
d.speak 
d.eat 
0

你總是可以從其他類繼承:

class BasicSay 
    def say(text) 
    puts prepare_text(text) 
    end 

    def prepare_text(text) 
    do_something_with(text) 
    end 
end 

class HtmlSay < BasicSay 
    def say(text) 
    "<p>" + prepare_text(text) + "</p>" 
    end 
end