Function 朱莉娅:为什么;未定义的“;,在for循环中调用函数以更新矩阵时

Function 朱莉娅:为什么;未定义的“;,在for循环中调用函数以更新矩阵时,function,for-loop,julia,Function,For Loop,Julia,为了简单起见,我定义了一个函数,比如说func(矩阵a,p,para)。当我在for循环中使用该函数时,会出现错误“matrix_a not defined”。但是如果函数在没有for循环的情况下被多次调用,那么它工作得很好 该函数是一个特殊的bot。根据不同的p,它将返回一个新的矩阵\u a。当我调用它时,我按以下方式执行: matrix_a = func(matrix_a, p, para) 这就像矩阵_a被更新一样。它可以与新行连接,或者只是在某些元素中添加一些数字 更具体地说,当 当我

为了简单起见,我定义了一个函数,比如说
func(矩阵a,p,para)
。当我在for循环中使用该函数时,会出现错误“matrix_a not defined”。但是如果函数在没有for循环的情况下被多次调用,那么它工作得很好

该函数是一个特殊的bot。根据不同的
p
,它将返回一个新的
矩阵\u a
。当我调用它时,我按以下方式执行:

matrix_a = func(matrix_a, p, para)
这就像矩阵_a被更新一样。它可以与新行连接,或者只是在某些元素中添加一些数字

更具体地说,当

当我测试它时,它运行良好:

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

这些是解决方案,原因是您正在使用全局范围。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

这些是解决方案

这是著名的全球/本地范围问题。您正在尝试在局部范围内分配全局变量。您可以在循环中的任意位置添加
global matrix_a
,以使
matrix_a
在全局范围内被
for
循环的局部范围继承,或者简单地将循环包装到以
matrix_a
为参数的函数中。这是著名的全球/本地范围问题。您正在尝试在局部范围内分配全局变量。您可以在循环中的任意位置添加
global matrix_a
,以使
matrix_a
在全局范围内被
for
循环的局部范围继承,或者简单地将循环包装到以
matrix_a
为参数的函数中。