Как определить константу в структуре Юлия - PullRequest
0 голосов
/ 04 сентября 2018

Я хочу определить структуру:

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

Я знаю, что не могу использовать struct как класс в python, но не могу найти, как решить эту проблему.

Как определить константу в структуре?

Ответы [ 2 ]

0 голосов
/ 04 сентября 2018

Учитывая, что я согласен с тем, что было сказано выше о нормальном использовании 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
0 голосов
/ 04 сентября 2018

Я второй @ комментарий Тасоса, возможно, вам следует сначала ознакомиться со структурами Джулии. Соответствующая часть документации, вероятно, здесь .

Поскольку вы объявили свою структуру как struct (в отличие от mutable struct), она неизменна и, следовательно, все (неизменяемые) поля структуры являются константами в том смысле, что их нельзя изменить.

julia> struct A
       x::Int
       end

julia> a = A(3)
A(3)

julia> a.x = 4
ERROR: type A is immutable
Stacktrace:
 [1] setproperty!(::A, ::Symbol, ::Int64) at .\sysimg.jl:19
 [2] top-level scope at none:0

Обратите внимание, что они получают свое неизменное значение в процессе построения, а не в определении структуры.

Кроме того, методы обычно должны находиться за пределами определения структуры.

...