2012-04-09 13 views
1

私の現在のプロジェクトでは、私のmain.luaの最上部にdofile()を実行することで、プロジェクトにいくつかの構文をグローバルに追加しようとしています。私はプロジェクトでグローバルとして追加しようとしているものを使用する3番目のファイルを要求しています。これを行うとエラーattempting to index the global valueが表示されます。dofileを使用して、同時に使用する

は例えば、以下の例では、私が作る試みでdofile()を使用TEST1:こんにちは()グローバル私のプロジェクト内で使用可能な、まだtest2.luaを必要とする過程で、私はエラーが表示されます。

PANIC: unprotected error in call to Lua API (test2.lua: attempt to index global 'test1' (a nil value)) 

この場合、test1は既にグローバルとして存在していてはなりませんか?どうすればこの問題を回避できますか?

main.lua:

dofile('test1.lua') 
require('test2') 

test1.lua

test1 = {} 
function test1:hello() 
    print("hello") 
end 

test2.lua

module('test2') 

test1:hello() 

答えて

5

in main.lua:

require("test2.lua") 

は次のようになります。

require("test2") 

とtest2.luaに私は

module('test2', package.seeall) 
test1:hello() 
+0

私はそのパッケージを必要としていたようです。私はmodule( 'test2')呼び出しがその問題の原因になることに気づいていませんでした。モジュール宣言を削除することも同様に機能することが判明しました。ありがとう! –

0

私はちょうど(平野Luaの5.1で)コードをテストしていると、それは私の側に働いた(私はrequire('test2.lua')require('test2'))。

あなたの環境に問題がある可能性があります。このLuaコードはどこで実行していますか?グローバル宣言が可能ですか?

「はい」の場合は、あなたの質問であなたが言うことを正確に行っていないかのように聞こえます。

このような

チェック物事:

  • dofile('test1.lua')本当に
(たとえば、あなたには、いくつかの場所で tset1代わりの test1を書いていない)変数名はOKです require('test2.lua')
  • 前に実行され
  • +0

    あなたはそれがtest1の内の値を見ることができるように、第2 paramは)(モジュールにようpackage.seeall合格しなければなりませんでしたそれはあなたが変更したすべてのものです(私は間違って最後に.luaを追加しました)? "Enter main" "テスト1を入力" "終了テスト1" "テスト2を入力" "lua:./test2.luaを入力して、ファイルの先頭と末尾に入力と終了のプリントを追加します。 :4:グローバル 'test1'(ゼロ値)のインデックスを作成しようとしました。 " –

    +0

    私はそれがすべて変更されたことは肯定的です。残りはあなたの投稿からコピーして貼り付けました。あなたの環境は何ですか?あなたはビデオゲーム、エンジン、または何の中にいますか? – kikito

    関連する問題