2012-10-14 2 views
1

같은 클래스에 정의 된 다른 함수 내에서 클래스에 정의 된 함수를 호출하는 방법이 혼란 스럽습니다. 여기에 내가 무엇을했는지 있습니다 :루비에서 비 정적 함수 호출하기

class Test 
    def TestFunc(obj) 
    puts obj 
    end 

    def Test.StatFun(obj) 
    puts obj 
    TestFunc(obj) 
    end 
end 

Test.StatFun([[5,2], [4,3]]) 

내가 cmd.exe에서이 프로그램을 실행할 때, 나는 다음과 같은 오류가 발생합니다 :

ruby LawtonTest.rb 5 2 4 3 LawtonTest.rb:10:in StatFun': undefined method TestFunc' for Test:Class (NoMet hodError) from LawtonTest.rb:14:in `'

나는 그것을 알아낼 수 없습니다. 어떤 도움이라도 대단히 감사하겠습니다.

+0

Ruby에 대한 소개 글을 작성했습니다. http://www.apeth.com/rubyIntro/justenoughruby.html – matt

답변

1

당신은 객체에 전화를해야 : (즉, 한 가지 클래스가 수행하는 방법을 알고 있기 때문에)이 극복하는 방법은 새로운 인스턴스를 생성하는 것입니다. Ruby에서 좋은 참조가 필요하다고 생각합니다. http://zetcode.com/lang/rubytutorial/oop/을 살펴보세요. 그러나 어쨌든, 문제는 전역 함수처럼 객체에서 호출해야하는 메소드 (사용자가 def로 선언 한 것)입니다. 당신이 TestFunc을 사용하려는 경우 그래서,이을 시도해보십시오 Test.new 부분은 당신이 TestFunc 방법을 사용할 수있는 객체를 생성하는 데 사용됩니다

def Test.StatFun(obj) 
    puts obj 
    Test.new.TestFunc(obj) 
end 

.

+0

감사합니다. 튜토리얼을 한 번 봐 주겠다. 나는 지금까지 루비가 내게 아주 외계인이기 때문에 OOP 배경이 없다. – conlaw

+0

@conlaw : C 또는 다른 절차 언어에서 온 경우 OOP는 꽤 어렵습니다. 튜토리얼을 읽고 다른 사람들을 검색하십시오. – Linuxios

0

어디서나 TestFunc에 대한 정의를 볼 수 없습니다. 정의 해 봤어? 또한

는 일반 루비 규칙은

문제 여기 ... 정말 대답하기 전에 질문을 읽어야 방법에 대한 소문자 이름 (예 : test_func)


편집를 사용하는 것입니다 TestFunc는 인스턴스 인에 대해서만 정의됩니다. 반면에 Test.StatFun을 호출하면 코드를 실행하는 객체는 클래스 테스트입니다. 이것은 TestFunc이 무엇인지 알지 못한다는 것을 의미합니다.

def Test.StatFun(obj) 
    puts obj 
    new.TestFunc(obj) 
end 
관련 문제