問題タブ [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.
lua - Lua の混合型の等価演算子
Programming in Lua の 13.2 章では、次のように述べられています。
算術メタメソッドとは異なり、リレーショナル メタメソッドは混合型をサポートしません。
同時に
Lua は、比較される 2 つのオブジェクトがこのメタメソッドを共有する場合にのみ、等値メタメソッドを呼び出します。
だから私は自分のライブラリをCで実装しており、次のような動作をサポートできるようにしたいと考えています
提供することで
と
これはうまくいかないようですが、これに対する回避策はありますか?
注: my_equal は、任意の引数でタイプ A とタイプ B の両方のユーザーデータを処理できます。
更新: メタテーブルの登録:
アプリケーション コード:
c++ - 要素への Lua C++ ユーザーデータ マトリックス アクセス
C++ でマトリックス クラスがあり、コンストラクターは次のとおりです。
次のように set メソッドと get メソッドを実装しました。
マトリックス クラスは Lua からアクセスできます。ただし、Lua からマトリックスの要素にアクセスできる唯一の方法は、m がマトリックスの場合、m:GetValue または m:SetValue です。
m[1,2] または m(1,2) という表記で行列要素にアクセス (設定) できるかどうかを知りたいです。ここで、m は行列、[1,2] は最初の行の要素であり、 2列目。
c - C で Lua モジュール内に Lua モジュールを作成するにはどうすればよいですか?
私にはActor
を与えたい がありScript
ます。
複数の共有オブジェクトを持つ代わりに、独自の依存関係を含む単一の最上位モジュールが必要です。
言い換えれば、私はこれを行うことができるようにしたい:
これらは両方とも、 と型userdata
の両方を作成する関数を返すだけです。私の問題は、このコードをロードすることはできますが、期待どおりに機能しないことです。どういうわけかを返すだけのようです。Actor
Actor.Script
Script
Actor
userdata
私は期待していました:
コードを 2 つの異なるモジュールに「バストアウト」すると、期待どおりの結果が得られますが、これを 1 つのモジュールにまとめたいと思います。
私はOSXとClangでコンパイルしています:
私が使用しているコードは次のとおりです。
アクター.c:
script.c:
common.h:
c - 別のLua登録C関数を呼び出す
Lua スコープに 2 つの C 関数が登録されているとします。
func2
質問:以内に電話してもfunc1
いいですか?
複数の引数が に渡されると、 で返されるfunc1
値が意味をなさないことがわかりました。lua_gettop()
func2
たとえばfunc1
、私の lua スクリプトで に3 つの引数が渡された場合、lua_gettop()
は で 3 を返しfunc1
、 で 3 つ以上を返しますfunc2
。lua_gettop()
現在の関数に渡された引数の数を返す必要があるため、これは間違いです。
新しいスタックフレームを設定するなど、呼び出す前にスタックトリックを行う必要がありますfunc2
か、それとも単にこれを行うべきではありませんか?
c - Lua 向けの関数を C で記述する場合、引数がテーブルのようなルックアップをサポートしているかどうかを確認する良い方法は何ですか?
引数がテーブルであるかどうかを確認できる潜在的なパターンを次に示します。
これは、最初の引数がテーブルの場合はいつでも機能します。ただし、他の Lua タイプは、userdata などのテーブル ルックアップをサポートし、luajit では cdata をサポートします。
lua_getfield
呼び出す前に、via などのテーブル ルックアップが成功するかどうかを確認する良い方法はありますか? タイプをテーブルに制限しないということです。関連して、インデックス付きルックアップをサポートする luajit のタイプは、テーブル、ユーザーデータ、および cdata だけですか?
現在このバージョンで動作するLuaJITを使用しているため、Lua 5.1 C APIに限定された回答に最も興味があります。
明確化
luaL_checkXXX
関数の利点は、 1 行で次のことを行うことです。
- 型が間違っている場合は、有益でわかりやすいエラー メッセージをスローします。
- すぐに使用できる C フレンドリーな戻り値を提供します。
テーブルに似たものを探しています。C に適したハッシュ テーブルの戻り値は期待していませんが、問題の引数がインデックス可能でない場合は、同じ品質のエラー メッセージをユーザーに表示したいと考えています。
私はダックタイピングの哲学を受け入れています。引数からいくつかのキーにインデックスを付けたいだけの関数を書く場合、その引数が本当にテーブルなのか、__index
ルックアップをサポートする単なるユーザーデータなのかは気にしません。どちらかを受け入れたい。
c - Lua から C に値のリストを返し、それらを 1 つずつ出力する方法は?
Luaに組み込まれたC APIを使用しています。私の目標は、整数の配列を Lua に渡し、それらの階乗を計算してから、結果を C に戻して出力することです。
目標を実現するために、私の C コードは次のとおりです。
そして、私のLuaスクリプトは次のようなものです:
コンパイルはうまくいきますが、ターミナルで実行すると、次のようになりました。
なぜこのような結果になるのかわかりません。C から Lua への受け渡しには問題ないようですが、Lua から C への問題があります。