2013-09-21 2 views
-1

좋아요, 루비에서 뭔가하는 방법에 대한 질문이 있습니다. 내가 할 일을 보여주기 위해 파이썬 예제를 가지고있다. 그래서 여기에있다.Ruby에서 인스턴스 메서드를 재정의하는 방법

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 

이제 전달 된 이전의 말 데프는에 의해 무효화된다

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

그래서 우리가 지금이 작업을 수행 할 수있는 다른 모듈에서, 해당 모듈이 "tester.py"라고하지만 지금 한 말 있습니다 새로운 것이므로 지금 뭔가가 전달되면 오히려 그것을 돌려 주겠다고 말합니다. 루비에서이 작업을 수행 할 수있는 방법이 있습니까? 감사

+1

루비의'require'는 파이썬의'import'와 거의 비슷합니다. 그리고 Ruby는 한 클래스가 다른 클래스로부터 상속받을 수있게합니다. 또한 인터넷에서 "믹스 인"을 검색하여 루비의 상속에 대한 대안을 확인하십시오. – FMc

+0

@FMc 다른 질문을하고 싶습니다. 믹스 인을 들여다 보았지만 다른 파일에서 어떻게 할 수 있는지 전혀 알 수 없었습니다. 그러나 너무 혼란 스럽다면 질문을 편집하여 더 이해하기를 바랍니다. – anakin

답변

2

세 개의 파일과 예입니다.

# 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

당신은 항상 다른 클래스에서 상속 할 수 있습니다 : animal.rb, dog.rbscript.rb : 여기

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 
관련 문제