Julia v0.6结构体字段默认初始化语法报错问题咨询
关于Julia v0.6里struct字段默认值报错的问题解答
嘿,我来帮你理清楚这个问题~
你在Julia v0.6里写struct A x::Int = 1 end时碰到的报错,核心原因是这个版本还没实现字段默认值的语法,但开发者提前把这个语法位置给“占住”了,也就是报错里说的“reserved”(保留)。
为啥要保留这个语法?
- 这其实是Julia语言迭代时的一个常见策略:提前预留好语法空间,避免未来加新功能时和用户已有的代码冲突。要是当时不把
x::Int=1这种形式标记为保留,万一有用户用类似写法搞了自定义逻辑,等官方后来要推出原生字段默认值功能时,就会出现语法歧义,导致一堆旧代码跑不了。 - 说白了就是给未来的功能更新铺路,保证语言升级的平滑性。
那这个语法后来允许用了吗?
必须的!在Julia v1.0及之后的版本里,这种直接在struct字段里设默认值的语法已经完全支持了。比如你写:
struct A x::Int = 1 end
创建实例的时候,A()会自动把x设为1,传参数A(2)就会覆盖默认值,完全符合你当初的预期。
顺便说下v0.6里的替代方案
在v0.6里要实现类似效果,得手动写构造函数:
struct A x::Int end A() = A(1) # 手动加个无参构造函数,设置默认值
这是当时的临时解决办法,直到后续版本原生支持了字段默认值。
内容的提问来源于stack exchange,提问作者Picaud Vincent
相关产品推荐
相关产品推荐

