2011-12-22 6 views
5

루아에서 OOP이 어떻게 수행되는지에 대한 핸들을 얻으려고합니다. 나는 그것을 할 수있는 간단한 방법이 있다고 생각했지만 작동하지 않습니다. 이유를 보지 못했습니다. 여기에 내가 노력하고있어입니다 : 참고로테이블에 함수에 전달 된 루아 인수는 nil입니다.

Person = { }; 
function Person:newPerson(inName) 
    print(inName); 
    p = { }; 
    p.myName = inName; 
    function p:sayHello() 
    print ("Hello, my name is " .. self.myName); 
    end 
    return p; 
end 

Frank = Person.newPerson("Frank"); 
Frank:sayHello(); 

, 나는 (내가 믿는에서 인쇄()가 오는 곳 그건 제외) 그 차이를하지 않는 가정입니다 비록 내가, 코로나 SDK와 함께 일하고 있어요. 어쨌든 날 죽이는 부분은 print (inName)에 의해보고 된 것과 같이 inName이 nil이라는 것입니다. 따라서 myHean은 sayHello() 호출이 실패 할 수 있도록 분명히 nil로 설정됩니다. myName은 제가 시도하는 기본 구조가 건전하다고 생각하게하지만, 간단한 것을 놓치고 있어야합니다.) newPerson()이 호출 될 때 inName의 값이 설정되지 않는 것처럼 보이지만, 필자는 그 이유를 알 수 없습니다. 왜 다른 함수 호출과 같은 것이 아닌지 나는 알 수 없다.

도움을 주시면 감사하겠습니다. 감사!

function Person:newPerson(inName) 

이 동일합니다 :

답변

7

Frank = Person:newPerson("Frank"); 
+0

나는 니콜과 니콜의 대답을 모두 받아 들일 수 있었으면 좋겠다. 네가 정확히 대답했기 때문에 ... 네가 먼저 대답했기 때문에 나에게주고있다. :) 니콜도 역시 설명해 주셔서 감사합니다. 내가 예상했듯이, 내가 방금 잊어 버린 바보 같은 뭔가가, 내가 모르는 어떤 것이 었습니다. 다시 감사드립니다, 모든 일을해야하고 어떻게 지금 원하는지 :) –

+4

@ Schollii : Stackoverflow 포럼에서 귀하의 답변을 설명하려고합니다. – karthik

+0

@karthik : 당신 말이 맞아요, 알림 주셔서 감사합니다! – Schollii

9

이는 것을 기억하십시오

따라서
function Person.newPerson(self, inName) 

, 당신이 수행 할 때

Person.newPerson("Frank"); 
을3210

이 두 개일 것이라고 예상하는 함수에 하나의 매개 변수를 전달하는 경우입니다. :으로 newPerson을 생성하는 것을 원하지 않을 것입니다.

관련 문제