メタメソッドで四則演算子をオーバーロードする

.lua

-- How to use metamethods in Lua.
list1 = {1, 2, 3}
list2 = {5, 7, 9}

function myAdd(listA, listB)
   local listSute = {} 
   for i = 1, #listA do
      listSute[i] = listA[i] + listB[i]
   end
   return listSute
end
function mySub(listA, listB)
   local listSute = {} 
   for i = 1, #listA do
      listSute[i] = listA[i] - listB[i]
   end
   return listSute
end
function myMul(listA, listB)
   local listSute = {} 
   for i = 1, #listA do
      listSute[i] = listA[i] * listB[i]
   end
   return listSute
end
function myDiv(listA, listB)
   local listSute = {} 
   for i = 1, #listA do
      listSute[i] = listA[i] / listB[i]
   end
   return listSute
end
setmetatable(list1, {__add = myAdd, __sub = mySub, __mul = myMul, __div = myDiv})

--------------------------------------------------
for _, v in ipairs(list1 + list2) do print(v) end
for _, v in ipairs(list1 - list2) do print(v) end
for _, v in ipairs(list1 * list2) do print(v) end
for _, v in ipairs(list1 / list2) do print(v) end

f:id:ti-nspire:20160823091622p:plain