julia - 将函数重新分配给值

标签 julia

我不明白为什么会发生/为什么我在执行 somefunc() = 100 时没有收到错误消息?现在当我“打电话”somefunc , 它输出 100 .我也试过做somefunc = 100 ,然后给我一个错误。重新分配后somefunc()100 , 当我写 somefunc ,它仍然说它是一个函数。

这里到底发生了什么?为什么重新分配 somefunc 时出现错误为一个值,但在重新分配 somefunc() 时, 不是?为什么somefunc仍然说它是一个功能,即使在重新分配它之后?

最佳答案

当你写 somefunc() = 100在全局范围内,您为 somefunc 定义了一个新方法。功能。这有两个效果:

  • 如果 somefunc未定义,使其成为绑定(bind)到新泛型函数的常量(即不能像 const x = 123 那样重新分配)。
  • 是否新添加方法 () -> 100somefunc通用函数对象。

  • 事实上,somefunc 的绑定(bind)是恒定的,这就是为什么你不能在之后重新分配它。这对性能非常重要,因为非常量全局变量的性能很差;如果函数绑定(bind)不是恒定的,那么任何时候调用函数都会很慢。

    即使你不能改变什么功能somefunc指的是,您可以通过向其添加方法甚至覆盖现有方法来更改函数本身。比如以后写somefunc() = 200不会创建新函数,而是用返回 200 而不是 100 的新方法替换不带参数的函数的方法。

    当你写:
    somefunc() = 100
    

    它只是一个简写
    function somefunc()
        return 100
    end
    

    所以即使有 =符号,这是一个赋值运算符,它与写 x = 100 不同。 ,它只是绑定(bind)值 100姓名 x .特别注意写作例如:
    somefunc = () -> 100
    

    允许你写somefunc() , 并得到 100 .不过这次你以后有空写somefunc = 100 ,如 somefunc = () -> 100不是函数定义,而是绑定(bind)匿名函数 () -> 100 的 na 赋值。名somefunc .

    关于julia - 将函数重新分配给值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61839966/

    相关文章:

    algorithm - julia 中排名不满的矩阵的尺寸缩减

    for-loop - Julia,for循环迭代器增加到零

    julia - Julia 是否有相当于 Python 的 __del__ 的关键字

    python - 尝试读取存储在 Julia 的 HDF5 存储中的表作为数据框

    julia - Julia 中的 `(1)(2)` 和 `x = 1; (x)(2)` 有什么区别?

    julia - Julia中线程的环境变量问题

    dataframe - 我可以使用 DataFrames 在 Julia 中按天或按月分组吗

    plot - 在 Julia 中为 Agents.jl 制作 Makie.jl 绘图配方动画的优雅方式是什么?

    julia - Julia 1.0 中 "workspace()"的替代方案是什么?

    dataframe - 过滤多个条件时,Julia dataframes 方法错误不明确