Enum is the base type of all enums.
An enum is a set of integer values, where each value has an associated name. For example:
enum Color Red # 0 Green # 1 Blue # 2 end
Values start with the value 0
and are incremented by one, but can be overwritten.
To get the underlying value you invoke value on it:
Color::Green.value # => 1
Each constant (member) in the enum has the type of the enum:
typeof(Color::Red) # => Color
An enum can be marked with the @[Flags]
attribute. This changes the default values:
@[Flags] enum IOMode Read # 1 Write # 2 Async # 4 end
Additionally, some methods change their behaviour.
An enum can be created from an integer:
Color.new(1).to_s # => "Green"
Values that don't correspond to an enum's constants are allowed: the value will still be of type Color, but when printed you will get the underlying value:
Color.new(10).to_s # => "10"
This method is mainly intended to convert integers from C to enums in Crystal.
An enum automatically defines question methods for each member, using String#underscore
for the method name.
#==
).#includes?
.For example:
color = Color::Blue color.red? # => false color.blue? # => true mode = IOMode::Read | IOMode::Async mode.read? # => true mode.write? # => false mode.async? # => true
This is very convenient in case
expressions:
case color when .red? puts "Got red" when .blue? puts "Got blue" end
Returns the enum member that has the given value, or raises if no such member exists.
Returns the enum member that has the given value, or nil
if no such member exists.
Returns value.
Returns the enum member that has the given name, or raises ArgumentError
if no such member exists.
Returns the enum member that has the given name, or nil
if no such member exists.
Iterates each member of the enum.
Returns true
if the given value is an enum member, otherwise false
.
Returns all enum members as an Array(self)
.
Returns the enum member that results from applying a logical "and" operation between this enum member's value and other.
Returns the enum member that results from adding other to this enum member's value.
Returns the enum member that results from subtracting other to this enum member's value.
Compares this enum member against another, according to their underlying value.
Returns true
if this enum member and other have the same underlying value.
Returns the enum member that results from applying a logical "xor" operation between this enum member's value and other.
Iterates each values in a Flags Enum.
Returns true
if this enum member's value includes other.
Returns the value of this enum member as a Float32
Returns the value of this enum member as a Float32
Returns the value of this enum member as a Float64
Returns the value of this enum member as a Float64
Returns the value of this enum member as an Int32
.
Returns the value of this enum member as a Int16
Returns the value of this enum member as a Int16
Returns the value of this enum member as a Int32
Returns the value of this enum member as a Int32
Returns the value of this enum member as a Int64
Returns the value of this enum member as a Int64
Returns the value of this enum member as a Int8
Returns the value of this enum member as a Int8
Appends a String
representation of this enum member to the given io.
Returns a String
representation of this enum member.
Returns the value of this enum member as a UInt16
Returns the value of this enum member as a UInt16
Returns the value of this enum member as a UInt32
Returns the value of this enum member as a UInt32
Returns the value of this enum member as a UInt64
Returns the value of this enum member as a UInt64
Returns the value of this enum member as a UInt8
Returns the value of this enum member as a UInt8
Returns the enum member that results from applying a logical "or" operation between this enum member's value and other.
Returns the enum member that results from applying a logical "not" operation of this enum member's value.
Convenience macro to create a combined enum (combines given members using #|
(or) logical operator)
Comparable(Enum)
Value
Object
Object
Returns the enum member that has the given value, or raises if no such member exists.
Color.from_value(0) # => Color::Red Color.from_value(1) # => Color::Green Color.from_value(2) # => Color::Blue Color.from_value(3) # raises Exception
Returns the enum member that has the given value, or nil
if no such member exists.
Color.from_value?(0) # => Color::Red Color.from_value?(1) # => Color::Green Color.from_value?(2) # => Color::Blue Color.from_value?(3) # => nil
Returns value.
Returns the enum member that has the given name, or raises ArgumentError
if no such member exists. The comparison is made by using String#camelcase
and String#downcase
between string and the enum members names, so a member named "FortyTwo" or "FORTY_TWO" is found with any of these strings: "forty_two", "FortyTwo", "FORTY_TWO", "FORTYTWO", "fortytwo".
Color.parse("Red") # => Color::Red Color.parse("BLUE") # => Color::Blue Color.parse("Yellow") # raises ArgumentError
Returns the enum member that has the given name, or nil
if no such member exists. The comparison is made by using String#camelcase
and String#downcase
between string and the enum members names, so a member named "FortyTwo" or "FORTY_TWO" is found with any of these strings: "forty_two", "FortyTwo", "FORTY_TWO", "FORTYTWO", "fortytwo".
Color.parse?("Red") # => Color::Red Color.parse?("BLUE") # => Color::Blue Color.parse?("Yellow") # => nil
Iterates each member of the enum. It won't iterate the None
and All
members of flags enums.
IOMode.each do |member, value| # yield IOMode::Read, 1 # yield IOMode::Write, 2 # yield IOMode::Async, 3 end
Returns true
if the given value is an enum member, otherwise false
. false
if not member.
Color.valid?(Color::Red) # => true Color.valid?(Color.new(4)) # => false
NOTE This is a class method, not an instance method because an instance method .valid?
is defined by the language when a user defines an enum member named Valid
.
Returns all enum members as an Array(self)
.
Color.values # => [Color::Red, Color::Green, Color::Blue]
Returns the enum member that results from applying a logical "and" operation between this enum member's value and other. This is mostly useful with flag enums.
(IOMode::Read | IOMode::Async) & IOMode::Read # => IOMode::Read
Returns the enum member that results from adding other to this enum member's value.
Color::Red + 1 # => Color::Green Color::Red + 2 # => Color::Blue Color::Red + 3 # => Color.new(3)
Returns the enum member that results from subtracting other to this enum member's value.
Color::Blue - 1 # => Color::Green Color::Blue - 2 # => Color::Red Color::Blue - 3 # => Color.new(-1)
Compares this enum member against another, according to their underlying value.
Color::Red <=> Color::Blue # => -1 Color::Blue <=> Color::Red # => 1 Color::Blue <=> Color::Blue # => 0
Returns true
if this enum member and other have the same underlying value.
Color::Red == Color::Red # => true Color::Red == Color::Blue # => false
Returns the enum member that results from applying a logical "xor" operation between this enum member's value and other. This is mostly useful with flag enums.
Iterates each values in a Flags Enum.
(IOMode::Read | IOMode::Async).each do |member, value| # yield IOMode::Read, 1 # yield IOMode::Async, 3 end
Returns true
if this enum member's value includes other. This performs a logical "and" between this enum member's value and other's, so instead of writing:
(member & value) != 0
you can write:
member.includes?(value)
The above is mostly useful with flag enums.
For example:
mode = IOMode::Read | IOMode::Write mode.includes?(IOMode::Read) # => true mode.includes?(IOMode::Async) # => false
Returns the value of this enum member as an Int32
.
Color::Blue.to_i # => 2 (IOMode::Read | IOMode::Write).to_i # => 3 Color.new(10).to_i # => 10
Returns a String
representation of this enum member. In the case of regular enums, this is just the name of the member. In the case of flag enums, it's the names joined by vertical bars, or "None", if the value is zero.
If an enum's value doesn't match a member's value, the raw value is returned as a string.
Color::Red.to_s # => "Red" IOMode::None.to_s # => "None" (IOMode::Read | IOMode::Write).to_s # => "Read | Write" Color.new(10).to_s # => "10"
Returns the enum member that results from applying a logical "or" operation between this enum member's value and other. This is mostly useful with flag enums.
(IOMode::Read | IOMode::Async) # => IOMode::Read | IOMode::Async
Returns the enum member that results from applying a logical "not" operation of this enum member's value.
Convenience macro to create a combined enum (combines given members using #|
(or) logical operator)
IOMode.flags(Read, Write) # => IOMode::Read | IOMode::Write
© 2012–2020 Manas Technology Solutions.
Licensed under the Apache License, Version 2.0.
https://crystal-lang.org/api/0.35.1/Enum.html