問題タブ [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 に答える
1204 参照

lua - Lua の混合型の等価演算子

Programming in Lua の 13.2 章では、次のように述べられています。

算術メタメソッドとは異なり、リレーショナル メタメソッドは混合型をサポートしません。

同時に

Lua は、比較される 2 つのオブジェクトがこのメタメソッドを共有する場合にのみ、等値メタメソッドを呼び出します。

だから私は自分のライブラリをCで実装しており、次のような動作をサポートできるようにしたいと考えています

提供することで

これはうまくいかないようですが、これに対する回避策はありますか?
注: my_equal は、任意の引数でタイプ A とタイプ B の両方のユーザーデータを処理できます。

更新: メタテーブルの登録:

アプリケーション コード:

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

c++ - 要素への Lua C++ ユーザーデータ マトリックス アクセス

C++ でマトリックス クラスがあり、コンストラクターは次のとおりです。

次のように set メソッドと get メソッドを実装しました。

マトリックス クラスは Lua からアクセスできます。ただし、Lua からマトリックスの要素にアクセスできる唯一の方法は、m がマトリックスの場合、m:GetValue または m:SetValue です。

m[1,2] または m(1,2) という表記で行列要素にアクセス (設定) できるかどうかを知りたいです。ここで、m は行列、[1,2] は最初の行の要素であり、 2列目。

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

c - C で Lua モジュール内に Lua モジュールを作成するにはどうすればよいですか?

私にはActorを与えたい がありScriptます。

複数の共有オブジェクトを持つ代わりに、独自の依存関係を含む単一の最上位モジュールが必要です。

言い換えれば、私はこれを行うことができるようにしたい:

これらは両方とも、 と型userdataの両方を作成する関数を返すだけです。私の問題は、このコードをロードすることはできますが、期待どおりに機能しないことです。どういうわけかを返すだけのようです。ActorActor.ScriptScriptActor userdata

私は期待していました:

コードを 2 つの異なるモジュールに「バストアウト」すると、期待どおりの結果が得られますが、これを 1 つのモジュールにまとめたいと思います。

私はOSXとClangでコンパイルしています:

私が使用しているコードは次のとおりです。

アクター.c:

script.c:

common.h:

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

c - 別のLua登録C関数を呼び出す

Lua スコープに 2 つの C 関数が登録されているとします。

func2質問:以内に電話してもfunc1いいですか?

複数の引数が に渡されると、 で返されるfunc1値が意味をなさないことがわかりました。lua_gettop()func2

たとえばfunc1、私の lua スクリプトで に3 つの引数が渡された場合、lua_gettop()は で 3 を返しfunc1、 で 3 つ以上を返しますfunc2lua_gettop()現在の関数に渡された引数の数を返す必要があるため、これは間違いです。

新しいスタックフレームを設定するなど、呼び出す前にスタックトリックを行う必要がありますfunc2か、それとも単にこれを行うべきではありませんか?

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

c - Lua 向けの関数を C で記述する場合、引数がテーブルのようなルックアップをサポートしているかどうかを確認する良い方法は何ですか?

引数がテーブルであるかどうかを確認できる潜在的なパターンを次に示します。

これは、最初の引数がテーブルの場合はいつでも機能します。ただし、他の Lua タイプは、userdata などのテーブル ルックアップをサポートし、luajit では cdata をサポートします。

lua_getfield呼び出す前に、via などのテーブル ルックアップが成功するかどうかを確認する良い方法はありますか? タイプをテーブルに制限しないということです。関連して、インデックス付きルックアップをサポートする luajit のタイプは、テーブル、ユーザーデータ、および cdata だけですか?

現在このバージョンで動作するLuaJITを使用しているため、Lua 5.1 C APIに限定された回答に最も興味があります。

明確化

luaL_checkXXX関数の利点は、 1 行で次のことを行うことです。

  • 型が間違っている場合は、有益でわかりやすいエラー メッセージをスローします。
  • すぐに使用できる C フレンドリーな戻り値を提供します。

テーブルに似たものを探しています。C に適したハッシュ テーブルの戻り値は期待していませんが問題の引数がインデックス可能でない場合は、同じ品質のエラー メッセージをユーザーに表示したいと考えています。

私はダックタイピングの哲学を受け入れています。引数からいくつかのキーにインデックスを付けたいだけの関数を書く場合、その引数が本当にテーブルなのか、__indexルックアップをサポートする単なるユーザーデータなのかは気にしません。どちらかを受け入れたい。

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

c - Lua から C に値のリストを返し、それらを 1 つずつ出力する方法は?

Luaに組み込まれたC APIを使用しています。私の目標は、整数の配列を Lua に渡し、それらの階乗を計算してから、結果を C に戻して出力することです。

目標を実現するために、私の C コードは次のとおりです。

そして、私のLuaスクリプトは次のようなものです:

コンパイルはうまくいきますが、ターミナルで実行すると、次のようになりました。

なぜこのような結果になるのかわかりません。C から Lua への受け渡しには問題ないようですが、Lua から C への問題があります。