Julia 朱莉娅身上有没有类似的定义?
我正在实现一些基本的状态机,其中包括Julia中的几个状态 在C中,我将使用类似于以下内容的方法跟踪当前状态: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
#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
变量,使用枚举更有意义(即使问题没有明确要求)。