如何使用元表(meta_table)在lua中强制执行加法?

我已经定义了以下元表实现加法。

local matrix_meta = {}

matrix_meta.__add = function( ... )
    return matrix.add( ... )
end

我想使用矩阵_meta add添加变量。以下命令有效。

matrix(p)+q
matrix(p)+matrix(q)
p+matrix(q)

但是以下代码不起作用。

p+q

原因很明显,它没有将“p”或“q”视为矩阵对象。它简单地抛出尝试在表格值上执行算术运算的错误。我想知道如何强制执行矩阵对象的加法。我的意思是,在lua中是否有可能执行这样的操作 env-Matrix:p+q 或者 matrix_meta.__add: p,q,以便将“p”和“q”自动识别为矩阵对象。因此,该问题是在矩阵环境中执行加法,其中变量将被识别为矩阵对象。请注意,我并不只是为两个变量而这样做,可能会有两个以上的变量。

点赞
用户2858170
用户2858170

如您在评论中所定义,

local p={{2,4,6},{8,10,12},{14,16,20}}
local q={{1,2,3},{8,10,12},{14,16,20}}

所以除非您像这样做:

local p = setmetatable(p={{2,4,6},{8,10,12},{14,16,20}}, matrix_meta)

否则pq只是常规的Lua表,没有元方法。

Lua表不定义算术运算。因此出现了错误消息。

如果您不喜欢Lua运算符或其语法,请考虑使用其他编程语言。

更好的写法是m({2,4,6},{8,10,12},{14,16,20}),而不是{{2,4,6},{8,10,12},{14,16,20}}

2019-08-13 17:10:51