Function 如何在lua中使用meta_表强制加法?
我使用元表定义了加法,如下所示Function 如何在lua中使用meta_表强制加法?,function,lua,arguments,add,metatable,Function,Lua,Arguments,Add,Metatable,我使用元表定义了加法,如下所示 local matrix_meta = {} matrix_meta.__add = function( ... ) return matrix.add( ... ) end 我想使用矩阵添加变量。以下命令运行良好 matrix(p)+q matrix(p)+matrix(q) p+matrix(q) 但是,下面的代码不起作用 p+q 原因很明显,它不将p或q识别为矩阵对象。它只是抛出一个错误,即试图对表值执行算术运算。我很好奇如何对矩阵对象
local matrix_meta = {}
matrix_meta.__add = function( ... )
return matrix.add( ... )
end
我想使用矩阵添加变量。以下命令运行良好
matrix(p)+q
matrix(p)+matrix(q)
p+matrix(q)
但是,下面的代码不起作用
p+q
原因很明显,它不将
p
或q
识别为矩阵对象。它只是抛出一个错误,即试图对表值执行算术运算。我很好奇如何对矩阵对象强制求和。我的意思是,可以在lua中执行类似于env Matrix:p+q
或作为Matrix\u meta.\u添加:p,q
,这样p
和q
自动识别为矩阵对象。所以问题是在矩阵环境中执行加法,在矩阵环境中变量将被识别为矩阵对象。请注意,我只是不想只针对两个变量,可能有两个以上的变量 如您评论中所定义
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)
p
和q
只是没有元方法的常规Lua表
没有为Lua表定义算术运算。因此出现了错误消息
如果您不喜欢LUA运算符或它的语法,请考虑使用另一种编程语言。
写一些像
m({2,4,6},{8,10,12},{14,16,20})
而不是{2,4,6},{8,10,12},{14,16,20}
,p和q是什么?什么是矩阵()?为什么Lua应该“将p或q识别为矩阵对象”?你是怎么定义的?请添加更多信息localp={{2,4,6},{8,10,12},{14,16,20}
localq={1,2,3},{8,10,12},{14,16,20}
其他相关术语在这个lua文件中,最好的方法是编写一个matrixAdd
函数,该函数假定两个参数都是矩阵。否则,您需要某种方法来区分矩阵和其他表。此外,不可能像没有元表时那样重载运算符。@luther matrix.add已经假定两个参数都是矩阵。所有命令,如matrix.add(p,q)、matrix.add(matrix(p),matrix(q))、matrix.add(p,matrix(q))等,都可以正常工作。基本问题是矩阵_meta add(+)不能识别p和q是矩阵。它被当作桌子。我只想添加一些环境,以便通常的加法+将是矩阵\元加法。因此,您希望在不使用函数或元表的情况下执行此操作。即使这是可能的,这也意味着全球运营商超载。然后,每当我们导入两个重载相同运算符的模块时,我们都会被搞砸。我正在寻找一个解决方案,在这个解决方案中,我不必在任何地方编写m({2,4,6},{8,10,12},{14,16,20})
。只是一个将表作为矩阵处理的环境。请注意,matrix.add
已经假定两个参数都是矩阵。所有命令如matrix.add(p,q)
,matrix.add(matrix(p),matrix(q))
,matrix.add(p,matrix(q))
等都能正常工作。@Maths89是的,因为matrix.add对标准表实现了这一点。如果Lua已经知道这一点,那么首先就不需要matrix.add。在某种程度上,您必须在编程语言和程序之间划一条线。