1

Lua モジュールを少し学び始めましたが、Lua の小さな部分で問題が発生しています。変数を変更するたびに、変数は nil に戻ります。

myModule.lua

--I should note that client is a number.
module(..., package.seeall)
local LoggedIn = { }

function isLogged( client )
    return LoggedIn[client]
end

function logIn(client)
    table.insert(LoggedIn,client,true)
end

function logOut(client)
    table.remove(LoggedIn,client)
end

main.lua イベントが発生する

package.loaded.myModule= nil; require "myModule"

function event( client )
    myModule.logIn(client)
end

function event_2( client )
    myModule.logOut(client)
end

編集:代わりに関数を使用し、ローカル変数にします。logIn 関数がエラーなしで発生したことを確認できても、まだ nil を返しています。ログアウト機能もまだ使用していません。何かご意見は?

しかし、後でmain.luaでクライアントがログインしているかどうかを確認すると、nilが返されます。

これは単なるモジュールの制限ですか、それとも変数へのアクセスが間違っているだけですか。

myModule.lua にアクセスする他の Luas でもこれを実行できるようにする必要があることに注意してください。

前もって感謝します

4

2 に答える 2

1

あなたは本当にあなたを完全に助けるのに十分なコードを私たちに与えませんが、これはあなたが私たちに与えた小さな例に基づいて私が設定した実用的な例です:

-- myModule.lua
module(..., package.seeall)

LoggedIn = {}

function isLoggedIn(client)
    return LoggedIn[client] ~= nil
end

function LogIn(client)
    LoggedIn[client] = true
end

function LogOut(client)
    LoggedIn[client] = nil
end

そしてそれをテストするには:

-- main.lua
require "myModule"

myModule.LogIn("Joe")
myModule.LogIn("Frank")

print(myModule.isLoggedIn("Bill"))
print(myModule.isLoggedIn("Frank"))

myModule.LogOut("Joe")
print(myModule.isLoggedIn("Joe"))

これは期待どおりに出力されます。

false
true
false

したがって、LoggedIn [client]が空であるかどうかの条件を正しくチェックしていないか、誰かが「ログアウト」したときにLoggedInテーブルから実際にエントリを削除することはないと思います。

于 2012-10-02T20:02:59.907 に答える
1

独自のコードを使用した次のコード ( のタイプミスを修正したと仮定funtion) は機能します (出力されますtrue\nnil)。

package.loaded.myModule= nil; require "myModule"
function event( client )
    myModule.LoggedIn[client] = true
end

event("foo")
print(myModule.isLogged("foo"))

これを行うより良い方法はlogIn、@Mike が提案したように関数を追加し、module(); の使用を避けることです。代わりに次のようなものを使用できます。

local myModule = require "myModule"
function event( client )
    myModule.logIn(client)
end

event("foo")
print(myModule.isLogged("foo"))
print(myModule.isLogged("bar"))

そして次のmyModule.luaようになります。

local LoggedIn = { }
function isLogged( client )
  return LoggedIn[client]
end
function logIn( client )
  LoggedIn[client] = true
end
return { LoggedIn = LoggedIn, isLogged = isLogged, logIn = logIn }
于 2012-10-02T20:41:25.537 に答える