TypeScript中如何为矩阵批量操作传递带参原型方法?
解决带参数的原型方法批量调用问题
针对你当前在multiplyMatrixScalar函数中无法给Complex.prototype.mul传递标量参数的问题,这里提供两种可行方案:
方案一:用闭包包装函数(不修改原批量操作函数)
通过创建一个包装函数,把需要传递的scalar参数捕获进去,在包装函数内部调用mul方法时传入该参数,同时绑定原元素的上下文:
export function multiplyMatrixScalar(matrix: Complex[][], scalar: Complex): Complex[][] { return forEachMatrixElement(matrix, function() { return Complex.prototype.mul.call(this, scalar); }); }
或者用更简洁的箭头函数写法(直接通过元素实例调用方法,无需手动绑定this):
export function multiplyMatrixScalar(matrix: Complex[][], scalar: Complex): Complex[][] { return forEachMatrixElement(matrix, elem => elem.mul(scalar)); }
原写法失效的原因
你直接传递Complex.prototype.mul时,forEachMatrixElement中的func.call(matrix[row][col])仅完成了this上下文的绑定,但没有传入mul方法必需的scalar参数,导致方法执行时缺少必要参数。
方案二:修改批量操作函数,支持额外参数(更通用)
如果后续还有更多带参数的方法需要批量调用,可以直接扩展forEachMatrixElement,让它支持传递任意数量的额外参数,提升通用性:
function forEachMatrixElement(matrix: Complex[][], func: Function, ...args: any[]): Complex[][] { const rowCount = countRows(matrix); const colCount = countCols(matrix); let matrixResult: Complex[][] = new Array(rowCount).fill(false).map(() => new Array(colCount).fill(false)); for (let row = 0; row < rowCount; row++) { for (let col = 0; col < colCount; col++) { matrixResult[row][col] = func.call(matrix[row][col], ...args); // 传入所有额外参数 } } return matrixResult; }
修改后调用multiplyMatrixScalar时,直接把scalar作为第三个参数传递即可:
export function multiplyMatrixScalar(matrix: Complex[][], scalar: Complex): Complex[][] { return forEachMatrixElement(matrix, Complex.prototype.mul, scalar); }
内容的提问来源于stack exchange,提问作者Oli
相关产品推荐
相关产品推荐

