2016-09-07 2 views
2

мне нужно определить некоторые переменные в Lua, которые при обращении результата при вызове функции C++:Lua переменные как вызов функции

Lua: 
var rootname = root.name; // 'root' acts as a call to c++ function defined below 

C++: 
class Node 
{ 
    std::string name; 
} 

Node * root() 
{ 
    return MyNodeGraph->GetRoot(); 
} 

Возможно ли это в Lua?

+0

Да. Проверьте lua api. – hjpotter92

+0

При доступе к 'root' вы получаете доступ к таблице' _G' для индекса 'root'. То, что вы хотите сделать, уже реализовано в vanilla Lua. – user6245072

ответ

0

Да, вы можете сделать что-то подобное. Это является одним из наиболее распространенных случаев использования Lua. Хотя правильный синтаксис Lua будет local a = prop(), если вы хотите быть 5.

https://www.lua.org/manual/5.3/ Читать и https://www.lua.org/pil/24.html https://www.lua.org/pil/25.html https://www.lua.org/pil/26.html

+0

вправо, но в вашем случае я должен добавить скобки, но я хочу, чтобы это не было – Mightywill

+1

Если вы не хотите прямой путь, вы можете обойти все вокруг. Запустите сценарий в отдельной среде, где есть метатет. Затем вы можете поймать чтение неинициализированных глобалов и перевести это на вызовы на собственные функции. – Vlad

+0

Я добавил несколько подробностей, чтобы вы могли лучше понять, что мне нужно, пожалуйста, посмотрите. – Mightywill

0

Установка метатаблицу _G не может быть частью «Lua наилучшей практики», но здесь вы идете:

setmetatable(_G, { 
    __index = function(t, k) 
    if k == "root" then 
     return root_function() -- Call your C function here. 
    end 
    return rawget(t, k) 
    end 
}) 

-- This function is just for a quick test. Call C function instead of this. 
function root_function() 
    print("in root_function") 
    return { name = "hello" } 
end 
-- 

-- Test 
rootname = root.name 
print(rootname) -- Prints "hello" 
Смежные вопросы