Вы можете использовать enum .Перечисления определяются с помощью макроса @enum
:
@enum State STOP START ERROR
Это создает три константы, STOP
, START
и ERROR
, все типа State
.Это означает, что вы можете отправлять функции по типу перечисления:
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> s = STOP
julia> println(s)
Stop state.
Перечисления могут быть преобразованы в целочисленные значения:
julia> Int.([STOP, START, ERROR])
3-element Array{Int64,1}:
0
1
2
Как видите, целое число по умолчаниюЗначения для последовательности перечисляемых состояний начинаются с 0
.Однако вы можете явно указать целочисленные значения для перечислений при использовании макроса @enum
:
julia> @enum Heat LOW=1 MEDIUM=2 HIGH=3
julia> Int.([LOW, MEDIUM, HIGH])
3-element Array{Int64,1}:
1
2
3
Обратите внимание, что при создании переключателя, как в приведенном выше определении println
, вы можетеубедитесь, что STOP
, START
и ERROR
являются единственно возможными значениями State
объекта.Это можно продемонстрировать явным построением State
объектов:
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