2012-05-15 2 views
3

как я могу передать значение от a.lua до b.lua?как передать и получить значение в Lua другому Lua?

скажем, что в моем a.lua у меня есть этот код переменной.

local value = "Hello WOrld!" 
director:changeScene ("b") 

моя проблема заключается в том, что, как я могу передать value от a.lua к b.lua?

спасибо заранее ....

ответ

4

Присвоить значение для глобальной таблицы (_G), как это:

_G.value = "Hello WOrld" 

В другом сценарии, вы можете сделать это:

value = _G.value 
+2

'значение = _G.value' не делает ничего, если не предшествует что-то еще ответ –

+2

знакомства косяк в , «_G» в вашем ответе совершенно лишний в первой строке, а вторая строка просто странная: 'значение' и' _G.value' - это то же самое *, поэтому вы пишете 'значение = значение' или '_G.value = _G.value' или' _G ["value"] = _G ["value"] '. – Mud

+0

Честно говоря, я не коснулся Lua на некоторое время, и этот ответ является результатом быстрого Google. +1 к более правильным ответам. –

8

Когда вы объявляете что-то локальное, вы явно указываете Lua, чтобы не делиться им между скриптами. Просто создайте нелокальной переменной вместо:

value = "Hello World" 

В b.lua Файл Просто Требовать файл a.lua и использовать его, например, в b.lua Файл

local a_File = require "a" 
print(a_File.value) 

Вы получите результат, как

"Hello World" 
+2

Для этого вам нужно сделать 'module ('a')' в начале файла 'a.lua' или, лучше,' return {value = "Hello World"} 'в конце, чтобы избежать использования 'module' (поскольку он [поощряет плохую практику] (http://lua-users.org/wiki/LuaModuleFunctionCritiqued), он удален в Lua 5.2). –

2

Лучше, чем просто набивать материал в глобальную таблицу, использовать модульную систему lua так, как она была предназначена для использования.

говорят, что у вас было два файла: a.lua и b.lua. b.lua нуждается в некоторой ценности от a.lua. это как бы вы выполнить это:

код a.lua:

module("a", package.seeall) 

local myVal = "My value in file a" 
local SomeVal = 15 

function GetSomeValue() 
    return myVal 
end 

b.lua код:

require "a" 
print(a.GetSomeValue()) -- prints 'My value in file a' 
print(a.SomeVal)   -- prints 15 
print(SomeVal)   -- prints nil, unless you've declared it in b.lua 

это гораздо чище, чем просто начинку вещи в таблице _G. что произойдет, если у вас есть 3 или 4 разных сценария, и вы пытаетесь сохранить значения, которые следует называть одинаковыми, только в разных контекстах? быть в состоянии сказать:

a.Value 
a.Function() 

не только намного более ясно, где вы выборки данных, но гораздо чище, чем говорят

_G["Value"] 

и в надежде, что это на самом деле значение вы надеетесь для. использование _G может быть проще, если вы работаете над простым случаем только с двумя файлами. но лучше изучить лучшие практики и использовать их на ранней стадии. использование _G было бы кошмаром, если бы у вас было несколько файлов, работающих совместно ...

+0

Это не работает. Вам нужно удалить 'local' перед SomeVal, чтобы получить его для печати 15. В противном случае он печатает' nil', как следует. –

+0

он работает, я протестировал его, используя lua 5.1 перед тем, как положить что-нибудь. –

+0

Копирование файлов точно так же, как они находятся в сообщении в 'a.lua' и' b.lua' и работает 'lua b.lua'I получить:' Моя ценность в файле a nil nil' (Lua 5.1.3) –

1

с помощью API-интерфейса API мы передаем значение в другой файл lua. и он отправляет данные в таблице или массиве типа

ниже код полезен ..

из a.lua файла

data="hellow" 
director:changeScene({data},"levelroom") 

из b.lua файла

module(...,package.seeall) 
new=function(params) 
    localGroup=display.newGroup() 
    data=params.data 
    print(data)   --output:hellow 
    return localGroup 
end 
Смежные вопросы