問題タブ [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.
c - Lua C API - プロパティを関数にマッピングする
関数をLuaのプロパティとしてプッシュすることは可能ですか?
現在、次のようにフィールドとしてプッシュすることで、Get/Set 関数を使用できます。
そして、Lua で次のように呼び出します。
メタテーブルなしで C 関数にマップされたプロパティをプッシュすることは可能ですか? カスタム関数にメタテーブルでマッピングできましたが、もっと簡単な方法があるかどうか疑問に思っていまし__index
た。__newindex
最終的に、メタテーブルのない次の構文が必要です。
これは と なし__index
で可能__newindex
ですか?
c++ - lua_open は luaJIT を使用して null を返します
最近の luaJIT を使用するとlua_open
、null
. これは、通常の lua ライブラリでは発生しません。
出力:0x0
luaJIT を機能させるにはどうすればよいですか?
SSCCE:
追加情報: ソースから OSX 10.9 にビルド (2.0.2 と git の両方を試した)make
とmake install
. コンパイラの使用:
(luajit コマンド ライン アプリケーションの使用は問題luajit
なく動作し、テスト スクリプトはエラーなしで実行されます。)
c - モジュールの未定義シンボルのロード中にエラーが発生しました: luaL_setfuncs
lua スクリプトから呼び出される C モジュールを作成しようとしています。私はdebian Linuxに取り組んでいます。私は mysql-proxy と lua 5.2 を使用しています。呼び出される関数の例をいくつか作成しました (チュートリアルからコピー)。
ローダーは次のように定義されます。
これを lua から呼び出すには、次のコードを使用します。
このコマンドでコンパイルしました:
スクリプトを実行しようとすると、require
コマンドで次のエラーが発生します。
私は自分が間違っていることに本当に迷っています。
c++11 - 任意の文字列を実行するときに Lua でエラーを処理するにはどうすればよいですか?
ここでは絶対的なミニマリズムを目指します。(Lua C API を使用するのは久しぶりです。)
このプログラムは、完璧な Lua を供給している限り問題なく動作します。ただし、何か悪いこと ( などasdf()
) を入力すると、プログラムがクラッシュします。エラーを適切に処理しないのはなぜですか?
私は以前に通話を中断しようとしました。それ自体への呼び出しでクラッシュしlua_pcall
ます。私はその線を超えることはありません。
c++ - luaL_error が呼び出されたときに c++ オブジェクトのデストラクタが呼び出されないのはなぜですか?
私はこのようなコードを持っています
lua が c コンパイラーによってコンパイルされたとき、longjmp を使用してエラーが発生することを私は知っています。そのため、C++ コンパイラを使用してコンパイルし、C++ 例外を使用してエラーを処理し、エラーがスローされた場合でもデストラクタを呼び出すようにしました。しかし、私の問題は、オブジェクトのデストラクタが呼び出されないことです。
ただし、次のコードは機能しています (デストラクタが呼び出されます)。
なぜこれが起こったのですか?LUAI_THROW マクロはスロー キーワードとして解釈されるはずです。
c - dlsym で lua ライブラリの関数を呼び出す方法
lua ライブラリ ランタイムを呼び出そうとしているので、C で lua lib を作成しました。
だから私はそれを動的ライブラリとして構築し、呼び出しを試みました:
しかし、それを使用する Lua コードを呼び出すと、セグメンテーション違反が発生します。
プログラムで lib lua を呼び出すにはどうすればよいですか。lib をいくつかの lua パスに配置し、lua api で libs を呼び出すことができることはわかっていますが、dlopen を使用して呼び出す必要があります。
ありがとう、
lua - Cに格納されたLua関数への「ポインタ」を取得する
Lua C API では、スタックから数値または文字列を .xml に格納できますlua_tostring()
。
Lua 関数への「参照」(それが正しい用語である場合) は、Lua API を介して C にどのように渡すことができますか? lua_call()
そのため、名前で参照する必要なく、後で C から呼び出すことができます。
(実際にはそのようにする必要があります.Cプログラムは将来どこかで関数を呼び出しますが、渡される関数はLuaプログラムで定義されているため、プログラムは関数について何も知りません)
c - Lua C API でセレクター文字列を使用してネストされた値を選択する
ネストされたテーブルで定義された値があると仮定します: tab["m"]["b"] = {}
. Lua では、前のステートメントで定義できます。
C APIでも可能ですか?tab
具体的には、、などを個別に押す代わりにm
、単一の文字列で値を選択しますtab["m"]["b"]
。
(以下のコードのように) 単一の値で行われるように、それを押して選択することはできません。
c - C API を使用した弱いテーブルと GC ファイナライザー
C API を使用して弱いテーブルに格納することにより、関数値の GC ファイナライザーを作成しようとしています。
純粋な Lua 5.2 でプロトタイプを作成することから始めました。
結果の出力:
プロトタイプは意図したとおりに機能しているようです。以下はCバージョンです:
以下を使用してコンパイル:
結果の出力:
C バージョンにはいくつかの小さな違いがあります。
- ローカル
sentinels
テーブルの代わりに、レジストリに保存しています。 - メタメソッドを使用してセンチネル値のテーブルの代わりに、サイズがゼロのユーザーデータを使用します
__gc
。
myfunc
C バージョンで完全なコレクション サイクルを実行した後にファイナライザが実行されない理由について、私は混乱しています。私は何を間違っていますか?