gpt4 book ai didi

function - 在不重新启动内核以重新定义变量/函数的情况下在 Jupyter 中使用 Julia 的任何有效方法?

转载 作者:行者123 更新时间:2023-12-04 04:11:04 25 4
gpt4 key购买 nike

所以我一直在尝试使我的 python 代码适应 Julia 而不是 fortran,主要是因为我有 Jupiter 可以轻松地即时测试我的工作。但是在 Julia 1 中,我找不到任何简单的方法来重新定义另一个单元格中已经定义的函数来测试它。比如

函数 a(b);返回 b+4;结束

然后在下一个单元格中我想测试而不是放宽条件并让它像

函数a(b,c);返回b+c;结束

但我不想更改名称,因为我还有其他依赖函数,我在其中调用了a。这样做的原因是为了原型(prototype)化定义 a 的最佳方式,显然这不会成为主要代码的一部分。

有什么办法吗?

最佳答案

Julia 使用多重分派(dispatch),这是两个不同的函数(或者更准确地说是同一函数的两种不同方法)。因此,不需要更改名称。

julia> function a(b);return b+4;end
a (generic function with 1 method)

julia> function a(b,c);return b+c;end
a (generic function with 2 methods)

julia> methods(a)
# 2 methods for generic function "a":
[1] a(b) in Main at REPL[1]:1
[2] a(b, c) in Main at REPL[2]:1

基本上,重新运行 Jupyter 单元将重新定义函数(如果它是同一组参数类型),所以这里没有问题。

更复杂的情况是当你想改变一个constants 的类型时,因为它们更深入到编译器中。常量不能改变它们的类型。
函数是常量。因此,如果您尝试分配一个非函数类型,它将抛出一个错误。

julia> typeof(a) <: Function
true

julia> a = 5
ERROR: invalid redefinition of constant a
Stacktrace:
[1] top-level scope at REPL[9]:1

关于function - 在不重新启动内核以重新定义变量/函数的情况下在 Jupyter 中使用 Julia 的任何有效方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61718275/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com