この第 1 版は Lua 5.0 用に作成されました。これはその後のバージョンでも大部分は関連していますが、若干相違があります。
第 4 版は Lua 5.3 を対象としており、Amazon やその他の書店で購入できます。
この本を購入することによって、Lua プロジェクトを支援することもできます。
![]() |
Lua でのプログラミング | ![]() |
第 IV 部: C API 第 28 章: C でのユーザー定義タイプ |
オブジェクト指向表記に対する代替として、通常の配列表記を使用して配列にアクセスすることもできます。a:get(i)
を書く代わりに、a[i]
と書くことができます。この例では、関数 setarray
と getarray
はメタメソッドに指定された順序で引数を受け取るため、これを実現するのは簡単です。素早い解決策は、これらのメタメソッドを Lua コード内に直接定義することです。
local metaarray = getmetatable(newarray(1)) metaarray.__index = array.get metaarray.__newindex = array.set(オブジェクト指向アクセスに対する変更がない、配列の元のインプリメンテーションに対してそのコードを実行する必要があります。) これだけで従来の構文を使用する必要があります。
a = array.new(1000) a[10] = 3.4 -- setarray print(a[10]) -- getarray --> 3.4
必要に応じて、C コードでこれらのメタメソッドを登録することができます。そのためには、初期化関数を再度変更します。
int luaopen_array (lua_State *L) { luaL_newmetatable(L, "LuaBook.array"); luaL_openlib(L, "array", arraylib, 0); /* now the stack has the metatable at index 1 and `array' at index 2 */ lua_pushstring(L, "__index"); lua_pushstring(L, "get"); lua_gettable(L, 2); /* get array.get */ lua_settable(L, 1); /* metatable.__index = array.get */ lua_pushstring(L, "__newindex"); lua_pushstring(L, "set"); lua_gettable(L, 2); /* get array.set */ lua_settable(L, 1); /* metatable.__newindex = array.set */ return 0; }
Copyright © 2003–2004 Roberto Ierusalimschy. All rights reserved. | ![]() |