2013-06-07 2 views
11

조금이라도 혼란스러운 비트; 그래서 여기에 내가하려고하는 것이있다! 하나는 기대하는 것처럼 내가 액세스 다른 파일에서루아에서 함수를 매개 변수로 전달하는 방법은 무엇입니까?

block_basic_DEF = 
{ 
    image = "button.png", 
    name = "basic block", 
    obj_table = this_obj_table.common_objects_table, 
    startup = function() init(), <----- This is the problem 
} 

: 는 따라서 데프을 가지고 내가되도록 init() 함수의 주소를 전달하고자하는 그 block_basic_DEF에서

function spawn(params) 
    local obj = display.newImage(params.image) 
    -- etc. 

내 산란에서 I

params.startup() --ie : 뭔가를 할 수 있습니다 실제로 단지 포인터에 대한 포인터 그러나 그것은 명백하게 OOP의 세계에 나쁜 언어의 난이 있던 C 배경에서 왔어요 원래 init 함수를

를 호출! :-))

건배

+2

그는 "DEF"아니다 "*는 * 따라서 데프 되세요." 루아는 "정의"를 가지고 있지 않습니다. 그것은 * table *입니다. 이것은 * value *입니다. 함수처럼. –

+0

는'params.startup는()'실제로 그 값 (도트 연산자)를 얻을 수있는 문자열'startup'있는 테이블과 인덱스로 params''에 의해 참조되는 값을 처리합니다. 그런 다음 함수로 값을 호출합니다 (괄호 연산자). 그 함수는'init'에 의해 참조 된 값을 함수로 호출합니다. –

답변

17

루아 함수는 값입니다, 당신은 괄호없이 자신의 이름을 사용하여 asssign 수 있습니다

function init() 
    print("init"); 
end 

block = { 
    startup = init 
} 

을 그리고 정기적 인 기능과 같이 호출

block.startup() 

그것은 OOP에 가까운이지만, 실제로는 기능이 정상 값이라는 사실만큼 간단합니다.

당신은 람다에 더 비슷한 원한다면, 당신은 이름을 생략, 전체 기능을 철자가 :

startup = function() print("init") end 
+0

감사합니다. 문제는 내 init() 함수가 그것에 대한 참조 후에 정의되었다는 것입니다. 나는 내 파일의 상단에있는 정의와 데이터를 선호하지 않는다. (항상 너무 혼란스러워 보인다.) 어떻게 참조를 전달할 수 있습니까? 건배 –

+0

제대로 사용 된 람다 함수는 지저분하지 않습니다. 앞으로 당신은 당신이 파일의 상단에 사용하고자하는 변수를 선언해야 참조 : 그것은 당신이 당신에게 고대의 C 관용구를 떨어 :) –

+0

@MarkHula에 이동 시간이다. 그것의 지역 변수를'local var1, var2, var3' 라인으로 선언 할 수 있습니다. 너무 많은 이름을 선언하는 것이 못생긴다면, 하나의 "namespace"테이블'local M = {}'을 선언하고 필드를 변수로 사용할 수 있습니다 :'M.var1 = ...'. 마지막으로 전역 변수는 네임 스페이스 테이블이 암시 적이라는 점을 제외하고는 이와 같이 작동합니다. – hugomg

5

당신은 단지 end 키워드를 잊어 버렸습니다. 그것은 함수 정의의 일부이며 그것을 생략 할 수 없습니다. C에서 닫는 }을 두지 않을까요?

block_basic_DEF = 
{ 
    image = "button.png", 
    name = "basic block", 
    obj_table = this_obj_table.common_objects_table, 
    startup = function() init() end, -- <-- This was the problem 
} 

이 외에도 다음과 같은 두 가지 문법 변화가 동일한 것을 형성 :

function foo() 
end 

foo = function() 
end 
+1

그러나 '로컬 함수'를 선언하는 경우 구문은 100 % 동일하지 않습니다. 함수를 재귀 적으로 호출하려면 할당 전에 변수를 선언해야합니다.'local foo; foo = function() end' – hugomg

+0

정확히 코드 샘플에 'local'이없는 이유는 무엇입니까?) – dualed

관련 문제