私は、複数のパラメータをとり、パラメータと同数の値を返すlua関数を持っています。各戻り値はパラメータに対応します。説明、データベースからキー/値ペアの値を読み込む機能を検討する:複数の値を返すlua関数からのエラーを返すためのベストプラクティス
val1, val2, val3 = my_function("key1", "key2", "key3");
val1 = my_function("key1");
my_function
からエラーを返すための最良の方法は何ですか?(例えば、提供された「キー」が無効な場合)
エラーの場合は2つの値、つまりエラーの場合はnil
とエラー文字列を返します。これが最善のアプローチですか?
val1, val2, val3 = my_function("key1", "key2", "key3");
if val1 then
-- Use val1, val2, and val3.
else
print("ERROR: " .. val2);
end
編集
いくつかの追加点:例えば
- LUAスクリプトが
lua_pcall()
を使用してCプログラム内から実行されています。 - スクリプトが失敗した場合、Cプログラムは中断してはなりません。
my_function()
は
- に実装されています。 Luaのエラーをスローする標準的な方法は、誤差関数( manual、 api)を介して行われる
my_function()
が失敗した場合、それはまた、それが失敗した理由を示すエラーコード(またはメッセージ)を返すべきC.
いくつかの点を明確にするために質問を編集しました。 luaスクリプト(最終的に 'my_function()'を呼び出す)は 'lua_pcall()'でCから実行されるので、上記のように 'my_function()'は "ok"変数を返すべきですか? (例えば、「ok、val1、val2、val3 = my_function()」)。 – Ben
@Ben、そうですね、私は追加の 'ok'値を含めるでしょう - これは最もクリーンな方法です。私もデザインのリビジョンをお勧めします。両方の関数がC言語になっているので、おそらくLuaを忘れてC言語のすべてをやっているほうが簡単です(そして速くなります)。 – kikito
@kikto、分かりやすくてありがとう。この場合、製品を拡張するためにlua(または同等のもの)を使用することは間違いなく意味があります。 – Ben