Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/variables/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Function 如何在lua中使用meta_表强制加法?_Function_Lua_Arguments_Add_Metatable - Fatal编程技术网

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。在某种程度上,您必须在编程语言和程序之间划一条线。