めもIo話を続けるつもりだったのだけれども。ネタを仕込んでいる間にわけあってLuaに手を出すことになり。5.2がリリースされたっけ、と思って調べてみたら。気をつけないとならない互換性のない変更があるのを見つけたので、それのめも。Version」という項目があります。deprecated.」と、さらっと書かれています。この[http://www.lua.org/manual/5.1/manual.html#luaL_register:title=luaL_register]という関数はライブラリを登録するのに使う関数なので、最低この1カ所とはいえ既存のライブラリで必ず書き換える必要がある変更です。マニュアルでは[http://www.lua.org/manual/5.1/manual.html#luaL_register:title=luaL_register]の代わりに[http://www.lua.org/manual/5.2/manual.html#luaL_setfuncs:title=luaL_setfuncs]を利用するように記載されています。簡単に扱えるようにした[http://www.lua.org/manual/5.2/manual.html#luaL_newlib:title=luaL_newlib]マクロを使うことになります。[http://www.lua.org/manual/5.1/manual.html#luaL_register:title=luaL_register]の書式を見てもらうとわかるのですが、この関数はグローバル環境に名前を登録してしまいます。結果としてライブラリを追加で読み込むたびにグローバル環境を「よごして」しまうことになります。これを嫌っての変更のようです。全体的にもグローバル環境に影響を与えない方向に変更が加わっているようです。具体的にライブラリを書いてみるまずC++あるいはCでライブラリを書いてビルドします。libraryを作ります。-lluaMacな人のばあい。-lluaMS-Windowsな人のばあい。-lluaライブラリを使うサンプル。"hoge"print(Hoge.hoge("ほげ"))hoge.soがあるフォルダで実行してください。ほげオブジェクトHogeはLuaのスクリプト中で宣言されていませんが利用できます。ライブラリの中で名前付けされているためです。5.2ではライブラリのエントリポイントluaopen_hogeを次のように書き換えます。1;}見てのとおりHogeという名前は登録されません。先ほどのスクリプトをそのまま実行すると、こうなります。?requireは読み込んだライブラリのオブジェクトを返すので、スクリプトを次のように書き換えます。"hoge"print(Hoge.hoge("ほげ"))これで期待どおりに動作するようになりました。5.1でも動作するので、当面5.2を使う予定がなというばあいでもLua側はこのように書いておくのがよさそうです。この例ではグローバル環境でHogeを宣言しているので結果的には同じですが、特定のスコープでだけライブラリを使うばあいにはグローバル環境をよごさずにすみます。5.1用、5.2用のどちらのライブラリも作成したいばあい、LUA_VERSION_NUMというマクロにバージョン番号が定義されているのでそれを見て登録関数を使い分けることになるかと。5.1とLua5.2の違いLua側から見た場合の差異。C言語向けのAPIの差異はいずれまた。他はロッカールームに戻ったがフォワードはぎりぎりまでシュート練習を...「3日目」の章、の2日目。Libraryでつなげてみるわけあって、Lua再起動中。2年も経...2010-01-06LuaとGLUTをつなげてみる以前C++で書いたコードをLuaを使って実現させてみた。(6)はてなブログをはじめよう!E_Mattsanさんは、はてなブログを使っています。ブログを報告するスターをつけました引用をストックしましたストック一覧を見る閉じる引用するにはまずログインしてくださいログイン閉じる引用をストックできませんでした。再度お試しください閉じる限定公開記事のため引用できません。