如何在Julia结构中定义常量

时间:2018-09-04 11:47:45

标签: julia

我想定义一个结构:

struct unit_SI_gen
    x::Float32
    const c = 2.99792458e8
    speed(x)=c*x
end

但是,它会引发错误:

syntax: "c = 2.99792e+08" inside type definition is reserved

我知道我不能在python中使用struct作为类,但是我找不到解决该问题的方法。

如何在struct中定义常量?

2 个答案:

答案 0 :(得分:4)

鉴于我同意上面提到的关于Julia中struct的正常用法的说法,实际上可以使用内部构造函数定义问题中的要求:

struct unit_SI_gen{F} # need a parametric type to make it fast
    x::Float32
    c::Float64 # it is a constant across all unit_SI_gen instances
    speed::F # it is a function

    function unit_SI_gen(x)
        c = 2.99792458e8
        si(x) = c*x
        new{typeof(si)}(x, c, si)
    end
end

答案 1 :(得分:3)

我第二个@Tasos的评论,您应该首先使自己熟悉Julia的结构。该文档的相关部分可能是here

由于您将结构声明为input field(与struct相反),因此它是不可变的,因此,该结构的所有(不可变)字段在无法更改的意义上都是常量。

mutable struct

请注意,它们在构造过程中而不是在结构定义中获得不变的值。

此外,方法通常应位于结构定义之外。