function - Julia:为什么“未定义”,当在 for 循环中调用函数来更新矩阵时
问题描述
我定义了一个函数,func(matrix_a, p, para)
为了简单起见。当我在 for 循环中使用该函数时,出现错误“matrix_a not defined”。但是如果在没有 for 循环的情况下多次调用该函数,它会很好地工作。
该功能是机器人的特殊功能。根据不同p
,它会返回一个新的matrix_a
。当我调用它时,我按以下方式进行操作:
matrix_a = func(matrix_a, p, para)
这就像 matrix_a 被更新了。它可能与新行连接或只是在某些元素中添加了一些数字。
更具体地说,它在以下情况下返回“matrix_a not defined”
para = ones(4)
matrix_a = zeros(2, 2)
for i = 1: 4
matrix_a = func(matrix_a, p, para[i])
end
它运行良好,当我测试它时:
para = ones(4)
matrix_a = zeros(2, 2)
i = 1
matrix_a = func(matrix_a, p, para[i])
i = 2
matrix_a = func(matrix_a, p, para[i])
i = 3
matrix_a = func(matrix_a, p, para[i])
i = 4
matrix_a = func(matrix_a, p, para[i])
解决方案
原因是您使用的是全局范围。IE 你在顶级全局环境中编写代码
三个解决方案是
把它写在一个函数中
function main()
para = ones(4)
matrix_a = zeros(2, 2)
for i = 1: 4
matrix_a = func(matrix_a, p, para[i])
end
end
main()
将其写在 let 块中
let
para = ones(4)
matrix_a = zeros(2, 2)
for i = 1: 4
matrix_a = func(matrix_a, p, para[i])
end
end
将 for 循环、while 循环视为一个函数,并将所有外部变量标记为全局变量
para = ones(4)
matrix_a = zeros(2, 2)
# treating the for loop like a function
for i = 1: 4
global matrix_a = func(matrix_a, p, para[i])
end
这些是解决方案
推荐阅读
- python - 第一次尝试 python,错误(“IndexError: index 8 is out of bounds for axis 0 with size 8”)和效率问题
- java - JavaFX 异常:内部图形尚未初始化
- python - Python - 有没有办法提出同一系列问题并存储每组答案,直到用户完成?
- python - 使用 python 和 VS Code 在“键盘”上导入错误
- python - Python usig pygame中的错误(AttributeError:'builtin_function_or_method'对象没有属性'right')
- python - 如何创建一个字符串作为使用来自字符串输入的特定单词的输出?
- lookup-tables - OpenModelica 中的查找表 (CombiTimeTable)
- javascript - 如何动态更改progressbarjs运行时
- html - 如何使用路由器路径作为根拥有 Express.js 服务器文件?
- python - 将字符串参数转换为 Pandas 对象