2017-01-19 8 views
2

、私は私の知る限りでは、以下の方法変数が関数であるかどうかを判断する速い方法はありますか?変数が関数であるかどうかを判断するために

function isFunction(variable) 
    return type(variable) == "function" 
end 

を使用し、これは文字列の比較です。私が理解しているように、文字列の比較はという比較的遅いであり、私のコードではこの機能がボトルネックになる恐れがあります。変数が関数であるかどうかを判断するのに費用がかかりませんか?

代わりに変数の型を示す整数を返す関数があると思います。あるいは私は別の方法で質問することができます:type(var)はどのようにして変数の型を決定しますか?確かに、各変数はその型を表す文字列を保持することができないので、type(var)を呼び出すときに文字列"function"を参照するバックエンドのものがあると推測しています。

+0

関数であるために変数を頻繁にチェックする必要がある場合は、ソフトウェアの設計について考えるべきかどうかわからない場合は、大きなボトルネックです。 – Piglet

+0

正直なところ、私は探していませんでした。右。とにかくタイプをチェックするための速い方法は必要ないでしょう。質問のために、どういうふうに私はそれが文字列かどうかを確認するよう求めています;-) – gromit190

+0

他にもあります。 "変数"は "値"でなければなりません。変数には型はありません。その値は式で生成されます。もちろん、変数と同じくらい単純な値にすることもできます。 –

答えて

8

ほとんどの文字列がインターナショナルであるため、Luaでの文字列比較は非常に高速です。

内部的に、すべてのLua値にはその型を識別するタグが含まれています。 typeが使用するのはこのタグです。

関連する問題