julia invalid redefinition of constant

在使用jupyter notebook时候,遇到这个问题。
比如:

# Space war game!
# 位置
mutable struct Position
    x::Int
    y::Int
end

# 大小
struct Size
    width::Int
    height::Int
end

# 游戏组件
struct Widget
    name::String
    position::Position
end

以上内容放在一个cell中,假如我其中的某个struct写错了,比如Widget写错了,然后我进行修改,然后再重新使用ctrl+enter运行这个cell,就会出现

invalid redefinition of constant Widget

网上查了下,发现以前有workspace()函数能清空变量和工作空间,但是现在没有了,github上也有issue。所以要怎么样才能在写错的时候方便地修改呢?还是说只能restart julia?这样实在是太不方便了!

Limitations · Revise.jl (timholy.github.io)

感谢!原来文档中的limitation是说这个的!但是这样确实不方便,没想到官方给出的是这样的方案,有点失望。我看到还有人说写在模块中的,但实际上交互式的跨cell了就不方便了,如果是jl文档中是可以。

workspace()其实就等同于重启Julia了;jl脚本也不支持重定义同名struct :sweat_smile:

确实不支持,但写错也难免,或者说,不仅如此,notebook的编写方式经常会需要运行前半部分的代码,以恢复环境。请教下有没有那种能判断是否存在然后存在就清空,没有就创建的写法?

主要是Julia里没有所谓“清空”的机制。

run(`$(Base.julia_cmd())`)

可以模仿workspace()的行为,但更好的方式还是把类型定义和实际执行运算的代码分开。

似乎并不适用于notebook这种环境,在VS code的notebook环境中运行这个代码,卡死了