Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/spring-mvc/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在Julia结构中定义常量_Julia - Fatal编程技术网

如何在Julia结构中定义常量

如何在Julia结构中定义常量,julia,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中定义常量 我支持@Tasos的评论,你应该先熟悉一下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中定义常量

我支持@Tasos的评论,你应该先熟悉一下Julia的结构。文档的相关部分可能是

由于您将结构声明为
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
请注意,它们在构造过程中获得不可更改的值,而不是在结构定义中


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

鉴于我同意上面关于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

你的问题中有很多隐含的假设,都是假的。首先,julia中的
const
不是你想象的那样,julia中的
struct
也不是你想象的那样。可能值得先阅读文档中的相关部分,这些部分应该能回答您的大部分问题。为了避免进一步混淆OP,它们通常不在外部,而更多的是不能首先将它们定义为普通字段(不必修改:p)确实不错的帖子:)纯粹是为了迂腐和进一步挑战你,这假设x也是“恒定的”/“私有的”,所以它不完全是被问到的:)(假设被问到的是清楚的,呵呵)区别在于(我相信你知道:)
x
可能会在实例之间改变,而
c
可能不会。至少这就是我所想的——Java中类似于
final static
的东西。当然,只有当
c
是位类型时,这才是正确的(但这是要求的)。如果
c
是可变的,那么它的指针将在实例之间有所不同,除非它是在编译时使用宏分配的(现在我们正陷入更为混乱的境地)。