2011-02-06 6 views
112

에 나는 .를 통해하고하고있는 : 무엇 :차이점. 과 : 루아

> x = {foo = function(a,b) return a end, bar = function(a,b) return b end, } 
> return x.foo(3,4) 
3 
> return x.bar(3,4) 
4 
> return x:foo(3,4) 
table: 0x10a120 
> return x:bar(3,4) 
3 

을 통해 함수 호출의 차이에 대한 혼란 스러워요?

+1

관련 항목 : http://stackoverflow.com/questions/3779671/why-cant-i-use-setunion-instead-of-set-union – finnw

답변

159

콜론은 self을 첫 번째 매개 변수로 전달하는 메서드를 구현하기위한 것입니다. 따라서 x:bar(3,4)x.bar(x,3,4)과 같아야합니다.

+26

아 ... 그래서 객체 지향 구문 설탕입니다. –

+5

정확히. 전체 참조 설명서에서 제공하는 유일한 단서는 "콜론 구문은 메서드를 정의하는 데 사용됩니다. 즉 암시 적 추가 매개 변수 자체가있는 함수입니다." (5.0 매뉴얼, pdf 19 페이지 하단) – BMitch

+2

ooh ahh ... 나는 공식 문서가 어디에 있는지 물어 보려고했으나 당신은 그것에 나를 때렸다. 잘 했어. :-) –

19

정의를 위해 정확히입니다. 수동으로 지정하는 것과 동일합니다. 컴파일시에도 동일한 바이트 코드를 생성합니다. 나는. function object:method(arg1, arg2)function object.method(self, arg1, arg2)과 같습니다. 사용 :

거의 같은 .로 - 전화의 특별한 종류가 있는지 object 및 계산/액세스 가능한 부작용은 한 번만 계산하기 위해 내부적으로 사용됩니다. object:method(arg1, arg2)object.method(object, arg1, arg2)과 동일합니다.

관련 문제