scope - 如何在 Julia 中获取 `do` block 的值?

标签 scope julia

我有一个 HDF5 文件,我想从中读取 2 个数组。如何使用 do block 表示法获取它们?

using HDF5

function myfunc()
    h5open("path", "r") do f
        a = read(f, "a")
        b = read(f, "b")
    end

    # ... do some more processing of a, b
    return a, b
end

如果我运行它,它会在 do block 之后出错并显示 a not defined。我如何获取这些值以便我可以在之后处理它们,而不用将完整的计算包装在 do block 中?

最佳答案

do block 只是用于创建作为第一个参数传递的匿名函数的语法(在本例中为 h5open)。就像常规函数一样,您需要从要在“外部”使用的匿名函数返回任何值:

# Function to mimic Base.open, HDF5.h5open etc
function open(f)
    return f()
end

function g()
    a, b = open() do
        c = "hello"
        d = "world"
        return c, d # returns from the "do"-anonymous function
    end
    return a, b
end

关于scope - 如何在 Julia 中获取 `do` block 的值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64651377/

相关文章:

ios - 有没有办法允许某些类访问某些其他类的私有(private)属性?

c++ - "::' 变量'"指的是什么?

julia - 在 Julia 中创建文本文件

floating-point - Julia 浮点运算的解决方法?

julia - 我们如何用 Julia 语言表示 Python/numpy 函数 "zeros_like"

powershell - 在Powershell中使用子脚本修改父脚本中的变量

javascript - 如何正确创建数组并在本示例的范围之外使用它?

python - 如果在 if 语句中使用外部函数的变量,为什么不能覆盖该变量的值?

struct - 在 Julia 中为结构数组创建和赋值

julia - 在 Julia 中过滤字典