2011-12-22 11 views
1

私はC Fuzzy APIを使用しています。ファイルに含まれている汎用モジュールをロードして、mycalculator.luaと言うことができます。これはうまくいきますが、後で別のファイルA.luaを実行しようとすると 'mycalculator'が必要になります。mycalculator.luaファイルがファイルシステム上で再ロードされない限り動作しません。私はそれをシステムにロードし、ファイルシステムにmycalculator.luaを持たずに利用できるようにしようとしています。それは、それを再度ロードせずに定義を保持するための方法はありますか?基本的に私はmycalculator.luaを文字列に変換して実行します。私はmycalculator.luaファイルをファイルシステムに入れたくないので、文字列として渡して、次の文字列に要求することができます。ファイルをロードせずに関数定義をLuaに追加するには?

+0

あなたはその文字列を置く場所が何ですか?文字列はファイルシステム上に魔法のように存在するわけではなく、いつも何らかのストレージが必要です。あなたはA.luaをどのように実行する予定ですか? – kikito

答えて

2

単にLuaスクリプトを実行してからLuaモジュールをロードするまでの違いです。 Luaモジュールをロードする場合は、実際にスクリプトと同じようにLuaモジュールをロードする必要があります。requireを呼び出してください。

あなたがLuaを初めて使っているようだから、これを説明してください。あなたはおそらくLuaスクリプトでこのようなコードを見たでしょう:

require 'mycalculator' 

これはLuaにとって特別な記述ではありません。それは関数呼び出しです。それのためだけのいくつかの構文糖です:

require('mycalculator') 

のLuaの関数はNAME VALUE構文の代わりNAME(...)構文で呼び出すことができますが、それはあなただけは一つのパラメータを送信することができます。また、パラメータはリテラル(またはテーブルコンストラクタ)でなければなりません。

CからLua require関数を呼び出すには、Luaスタックを使用する必要があります。 lua_getfield(L, LUA_GLOBALSINDEX, "require");を使用してグローバルテーブルから関数をフェッチする必要があります。次に、ロードするモジュールの名前を含む文字列をスタックにプッシュします。次に、lua_pcallまたはそれを呼び出すために関数を呼び出すLua関数を使用します。

+0

まあ、私はロード/モジュールを要求し、この要件を文字列として渡すことに興味があります。私は必要なモジュールの内容を含む文字列を渡して、luaがそのモジュールのファイルシステムに決して通らないようにしたい。これはできますか? – Androider

+0

ロードを要求する際、私はluaにファイルシステムをチェックさせたくない代わりに、このモジュールを文字列として渡したいと思います。 – Androider

+0

だから、私は次のようなものを使いたくないということです:path = "./path/to/a/file.lua" – Androider

関連する問題