問題タブ [lua-api]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票する
2 に答える
2520 参照

c++ - ./lua/addtest.lua:9: ローカル 'testobj' (ユーザーデータ値) のインデックス作成を試みます]]

test.exe は addTest.lua を呼び出しlua_testobjてテーブルに設定し、addTest.lua は testobj.dll を呼び出しますが、testobj.dll は "lua_testobj" を取得できません。

エラーメッセージは

addTest.lua:9 ローカル 'testobj' (ユーザーデータ値) のインデックス作成を試みます

  1. test.exe

    /li>
  2. addtest.lua コードは次のとおりです

    /li>
  3. testobj.dll のソース コードは次のとおりです。

    /li>
0 投票する
2 に答える
2369 参照

c++ - lua 関数の引数が近くにあると予想される

C++ プロジェクトで lua を使用しようとしています。lua の実行については、次のように記述します。

そして lua スクリプト:

それは機能せず、エラーメッセージが表示されました:

しかし、追加すると

lua スクリプトの最後ではうまく動作します。私は何を間違っていますか?

0 投票する
1 に答える
235 参照

c - lua の lightuserdata を使用してタイマー コールバックを登録する

C タイマー (アラームではない) をラップし、それを lua 内で使用して、1 秒が経過した後にトリガーされるコールバック関数を指定できるようにしたいと考えています。複数のタイマーを使用するため、タイマーIDとコールバックをテーブルに格納するのですが、「lua_rawset」呼び出し時にセグメンテーションフォルトが発生したため、stack_dumpを使用してluaスタックをチェックすると、「lua_rawget」でnilが返されました。 66(lr_register_timer、FIXME でマーク)、ここで何が問題なのですか? すみません、私の英語は下手です。乾杯。

ルアコード:

C コード:

0 投票する
1 に答える
957 参照

c - lua_Integer および lua_createtable (テーブルサイズ制限)

Lua 5.3 では、C API のテーブル関連の関数は receive と returnlua_Integerです。

しかし、lua_createtableそれでも受け取りintます。

以下の関数の例では、ソース テーブルの長さを使用して、同じサイズのコピーを作成しています。

ただし、警告を消すにはキャストが必要です。

警告: 'lua_Integer' から 'int' への変換により、その値が変更される可能性があります [-Wconversion]

Luaメーリングリストで検索すると、Lua 5.2に関する次のスレッドが見つかりました(以前のバージョンにも当てはまると思います):

引用: Roberto Ierusalimschy (2012 年 8 月 7 日)

テーブルのサイズはすでに 2147483647 要素に制限されています。Lua は内部的に 'int' を使用してすべての配列にインデックスを付けます (文字列/バイト配列を除く)。どこでも符号なしの値 (size_t など) を扱うのは面倒です。ptrdiff_t には何の保証もありません。

long longこれは、 forを使用する Lua 5.3 にも当てはまりlua_Integerますか? int上記の例で使用されているfromへのキャストはlua_Integer、Lua 5.3 で安全ですか?

0 投票する
1 に答える
2617 参照

c++ - lua テーブルへのユーザーデータ メタテーブルの追加

ユーザーデータ オブジェクトを使用して適切に動作するスクリプト システムがあります。ただし、通常のテーブルを取ることができるユーザーデータにプロパティが必要になりました。

私がすべきことは、通常のテーブルを作成し、現在のメタメソッドのセットを使用するようにメタテーブルを設定することだと思いますが、これを行う方法を理解するのに苦労しています-単純な微調整だと確信しています。今それ。

私の既存のコードは次のようになります。

__gcクラスを削除するためのメタメソッドがありLuaWrapped::Ptrます(これは a のラッパーboost::shared_ptrです)。それはそのままにして、ポインターを通常のテーブルの lightuserdata フィールドに格納すると思います。


通常のテーブルの問題に対する実験的なカスタム メタテーブル (コメントでの議論による):

get で期待される出力:

テーブル、文字列

取得時の実際の出力 (Lua 5.2、Ubuntu 14.04):

ブール値、ユーザーデータ