2017-01-14 1 views
1

Lua에서 C++로 테이블을로드하려고합니다.Lua 파일을로드하고 함수를 실행하지 않고 변수를 사용하십시오.

function alma(arg) 
    print(arg) 
end 

sometable = { 
    num = 5, 
    text = "this is a string", 

    nested = { 
    {"a", alma("argument")}, 
    {"table", alma("arg")}, 
    {"element", alma("asd")} 
    } 
} 

을 나는 단지 덩어리를 얻을 luaL_loadfile를 호출 할 경우이 파일이 모습입니다. lua_dofile으로 전화하면 요소를 얻지 만 각 요소에 대해 alma 함수가 실행됩니다. this SO 스레드에서 누군가가 이러한 종류의 항목을 함수로 랩핑하여 데이터를 가져 오라고했습니다. 내가 랩/함수를 호출 할 때 3 개의 alma 함수가 getter를 호출하는 순간을 실행합니다. alma 함수를 실행하지 않고 sometable과 그 요소를 얻으려면 어떻게해야합니까?

+0

당신은 해당 테이블의 일부 요소의 게으른 평가를 구현하기 위해 테이블에 메타 테이블 사용할 수 있습니다 . 그러므로, 'alma'는 처음으로 해당 엘리먼트에 접근 할 때에 만 호출된다. 이 기능은 투명합니다. 즉, 명시 적으로 일부 함수를 호출 할 필요가 없습니다. –

답변

2

내가

확인 일부 기능, 따라서 { "일부 문자열", 기능} 테이블 요소가 될 것이다, GUI 요소에 대한 온 클릭 이벤트를하고 싶습니다, 당신은 호출 된 함수가 필요합니다 후에. 그냥 단순히 이름 쓰기 즉, 그 functiion의 값을 저장합니다

nested = { 
    {"a", func_argument}, 
    {"table", func_arg}, 
    {"element", func_asd} 
    } 

을하지만 인수를 전달, 같은 함수를 호출합니다. 그리고 정보를 함수로 저장하려고합니다. 그러니하면 테이블에 직접 함수를 정의하거나 폐쇄에의 인수를 저장, 다른 함수를 반환합니다 몇 가지 함수를 호출 :

-- function to be called 
function alma(arg) 
    print(arg) 
end 

-- define functions in table 
nested1 = { 
    {"a", function() alma "argument" end}, 
    {"table", function() alma "arg" end}, 
    {"element", function() alma "asd" end} 
} 

-- or create function within another function 
function alma_cb(name) 
    return function() alma(name) end 
end 

nested2 = { 
    {"a", alma_cb "argument"}, 
    {"table", alma_cb "arg"}, 
    {"element", alma_cb "asd"} 
} 
+0

@val, 요점은 함수가 값이라는 것입니다. 그것은 이름이 없지만 하나 또는 변수 나 필드를 참조 할 수 있습니다. –

1

일부 기능을 호출하지 않으면 아무런 가치를 얻을 수 없습니다. 로드 된 모든 청크는 하나의 기능입니다. 데이터가 아니라 데이터를 구성/반환 할 함수. 그것을 호출해야하므로 일부 전역 변수가 채워지거나 명시 적으로 값이 반환됩니다.
alma()을 호출하지 않으려면 호출하지 마십시오. alma()으로 전화하지 않고 테이블을 채우십시오. 예를 들어
는 :

return { 
    num = 5, 
    text = "this is a string", 

    nested = { 
    {"a", "argument"}, 
    {"table", "arg"}, 
    {"element", "asd"} 
    } 
} 

로드하고,이 덩어리를 호출해야합니다, 그것은 구성하고 .nested 서브 테이블과 테이블을 반환하고 alma()가 호출되지 않습니다.

+0

그래서 함수를 중첩시킬 수는 없으며,로드시 자동 함수 호출을 피하려면 데이터의 함수에 대한 참조를 피해야합니까? – val

+0

XY 문제가 관련되어 있다고 느낍니다. 당신은 기능을 가지고 있다고 주장하지만 전화하고 싶지는 않습니다. 당신의 정확한 과제는 무엇입니까? 달성하고자하는 것은 무엇입니까? – Vlad

+0

GUI 데이터를 루아에서 작성하고 C++로로드하려고합니다. 약간의 조정을 할 때 프로그램을 다시 컴파일하지 않아도되고, gui 요소에 대한 onClick 이벤트를 갖고 싶습니다. 따라서 { "some string", function} 테이블 요소. – val

관련 문제