4

collections.defaultdict存在しない連想配列キーのデフォルト値を自動的に処理する、Pythonで利用可能なものと同様の機能がLuaにありますか?

エラーの代わりに以下のコードを設定nilしたいと思います。vしたがって、基本的にa[2](存在しないキー)tableをデフォルトにする方法は次のとおりです。

a = {}
v = a[2][3] 

>>> PANIC: unprotected error in call to Lua API (main.lua:603: attempt to index field '?' (a nil value))

Pythonでは、次のように実行できます。

>>> import collections
>>> a = collections.defaultdict(dict)
>>> print a[2]
{}
4

2 に答える 2

5

それを行うLua標準機能はありますか?いいえ。しかし、メタテーブルを使えば簡単にできます。そのようなテーブルを作成する関数を書くことさえできます:

function CreateTableWithDefaultElement(default)
  local tbl = {}
  local mtbl = {}
  mtbl.__index = function(tbl, key)
    local val = rawget(tbl, key)
    return val or default
  end
  setmetatable(tbl, mtbl)
  return tbl
end

各要素は同じデフォルト値を取得することに注意してください。したがって、デフォルト値をテーブルにすると、返されたテーブル内の各「空の」要素は同じテーブルを効果的に参照します。それが望ましくない場合は、関数を変更する必要があります。

于 2012-04-29T10:02:46.733 に答える