3

Lua の数値を値に変換する場合lua_tointeger()、 、またはを使用する必要がありますか?lua_tonumber()off_t

Lua 自体のソース コードを確認したところ、file:seek関数ではlua_Numberではなくが使用されていることがわかりましたlua_Integer

また、luaposixパッケージがlua_tonumber()(または luaL_checknumber() など) を広範囲に使用し、ファイル記述子 (!) を読み取ることもわかります。

そしてどうsize_tですか?

「極端」に行き、すべての整数型 C 型 (mode_t、size_t など) にlua_tonumber()(and ) を使用する必要がありますか? それとも、それが潜在的に大きな数であると「感じる」場合にのみ、lua_pushnumber()通常は使用lua_tointeger()して頼るべきですか?lua_tonumber()

4

2 に答える 2

1

自分で Lua をビルドする場合はluaconf.h、 lua_Number と lua_Integer がどのように定義されているかを確認できます。通常、lua_number は double と同じもので、lua_Integer は ptrdiff_t です。

ptrdiff_t(通常int32_tor ) は( or ) よりもint64_t近いですが、Lua はおそらくとにかく数値を形式で保存します。off_tuint32_tuint64_tdoubledouble

一方、double私の記憶が正しければ、2^52 までの整数を正確に格納できます。ほとんどの場合、これで十分です。

lua_*number()期待する場所float/doubleと整数を期待するときに使用することをお勧めしlua_*integer()ます (FD、オフセット、および位置を使用するすべての OS 関連関数のように)。

于 2013-10-01T08:16:09.363 に答える