Julia 朱莉娅身上有没有类似的定义?

Julia 朱莉娅身上有没有类似的定义?,julia,Julia,我正在实现一些基本的状态机,其中包括Julia中的几个状态 在C中,我将使用类似于以下内容的方法跟踪当前状态: #define STOP 1 #define START 2 #define ERROR 3 然后在比较中使用友好常数等 if(state == STOP) { printf("Stop state.\n"); } Julia中是否有等同于“定义”的东西?如果您真的想要尽可能接近“定义”的东西,请使用常量: const STOP = 1 const START = 2 c

我正在实现一些基本的状态机,其中包括Julia中的几个状态

在C中,我将使用类似于以下内容的方法跟踪当前状态:

#define STOP 1
#define START 2
#define ERROR 3
然后在比较中使用友好常数等

if(state == STOP) {
    printf("Stop state.\n");
}

Julia中是否有等同于“定义”的东西?

如果您真的想要尽可能接近“定义”的东西,请使用
常量:

const STOP  = 1
const START = 2
const ERROR = 3
你可以使用。使用
@enum
宏定义枚举:

@enum State STOP START ERROR
julia> @enum Heat LOW=1 MEDIUM=2 HIGH=3

julia> Int.([LOW, MEDIUM, HIGH])
3-element Array{Int64,1}:
 1
 2
 3
这将创建三个常量,
停止
开始
,和
错误
,所有类型均为
状态
。这意味着您可以对枚举类型分派函数:

import Base.println
function println(s::State)
    if s == STOP
        println("Stop state.")
    elseif s == START
        println("Start state.")
    else
        println("Error state.")
    end
end
枚举可以转换为整数值:

julia> Int.([STOP, START, ERROR])
3-element Array{Int64,1}:
 0
 1
 2
如您所见,枚举状态序列的默认整数值从
0
开始。但是,在使用
@enum
宏时,可以选择显式设置枚举的整数值:

@enum State STOP START ERROR
julia> @enum Heat LOW=1 MEDIUM=2 HIGH=3

julia> Int.([LOW, MEDIUM, HIGH])
3-element Array{Int64,1}:
 1
 2
 3
请注意,在创建开关时,如上面的
println
定义中,您可以确信
停止
启动
、和
错误
状态
对象的唯一可能值。这可以通过显式构造
状态
对象来证明:

julia> State(0), State(1), State(2)
(STOP::State = 0, START::State = 1, ERROR::State = 2)

julia> State(3)
ERROR: ArgumentError: invalid value for Enum State: 3
Stacktrace:
 [1] enum_argument_error(::Symbol, ::Int64) at ./Enums.jl:34
 [2] State(::Int64) at ./Enums.jl:139
 [3] top-level scope at none:0

听起来你想要一个枚举。谢谢这也是相关的,我想对于特定的
state
变量,使用枚举更有意义(即使问题没有明确要求)。