Julia中类型的静态字段

4
我希望有一个类似以下格式的东西:
type Foo
    a::Int
    b::Int = 5
    end

当调用Foo()方法时,会返回一个类型为Foo的实例,其中Foo.a未被赋值,而Foo.b = 5

但是默认的隐式构造函数只在我的字段没有被赋值时才有效,因此我想要预先分配Foo.b = 5(如果可能的话,还要将其设置为静态和最终状态),我必须定义自己的内部构造函数,请问有人能告诉我如何做到这一点吗?我一直无法弄清楚。


1
我对“静态和最终”这个概念感到困惑。如果你的意思是“静态”指的是“全局的,而不是与实例有关”,那么根本不需要在类型声明中加入它。如果你的意思是“最终”指的是“不能有子类型”,那么所有 Julia 中的具体类型都是如此。 - Mike Graham
@MikeGraham 我的意思是 Java 中的 static 和 final。通过“static”,我指的是属于类型而不是实例,但是我不确定这种区别是否存在于类型(而不是类)中;通过“final”,我只是指它不能被更改。 - Set
如果某些东西不属于该实例,则根本不要将其放入类型定义中。请意识到在Julia中,您可能会使用模块来处理Java中可能使用类的事情。(如果这个全局事物是可变的,请非常小心。) - Mike Graham
1个回答

2

好的,我认为我已经弄清楚了,我必须从我想要预定义的字段开始,但在内部构造函数中等待使用new()来定义它们,对于我想保留未定义的字段,我不能给它们一个预定义的类型,以下是代码:

type Foo
    b::Int
    a

    Foo() = new(5)
    end

现在的Foo()会给出Foo(5, #undef)

你完全可以给 a 也加上一个 ::Int 的注释。如果您希望该字段可能为空,则使用 Nullable {Int} 而不是允许它为 #undef - Fengyang Wang

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接