abstract struct Struct
Overview
Struct
is the base type of structs you create in your program. It is set as a struct's superstruct when you don't specify one:
struct Foo # < Struct end
Structs inherit from Value
so they are allocated on the stack and passed by value. For this reason you should prefer using structs for immutable data types and/or stateless wrappers of other types.
Mutable structs are still allowed, but code involving them must remember that passing a struct to a method actually passes a copy to it, so the method should return the modified struct:
struct Mutable property value def initialize(@value : Int32) end end def change_bad(mutable) mutable.value = 2 end def change_good(mutable) mutable.value = 2 mutable end mut = Mutable.new 1 change_bad(mut) mut.value # => 1 mut = change_good(mut) mut.value # => 2
The standard library provides a useful record
macro that allows you to create immutable structs with some fields, similar to a Tuple
but using names instead of indices.
Direct Known Subclasses
- Atomic(T)
- Atomic::Flag
- BitArray
- Char::Reader
- Colorize::Color256
- Colorize::ColorRGB
- Colorize::Object(T)
- Complex
- CSV::Builder::Row
- CSV::Row
- CSV::Token
- Enumerable::Chunk::Alone
- Enumerable::Chunk::Drop
- File::Info
- GC::ProfStats
- GC::Stats
- Hash::Entry(K, V)
- HTTP::FormData::FileMetadata
- HTTP::FormData::Part
- HTTP::Headers
- HTTP::StaticFileHandler::DirectoryListing
- IO::EncodingOptions
- JSON::Any
- JSON::Builder::ArrayState
- JSON::Builder::DocumentEndState
- JSON::Builder::DocumentStartState
- JSON::Builder::ObjectState
- JSON::Builder::StartState
- LLVM::ABI::ArgType
- LLVM::BasicBlock
- LLVM::BasicBlockCollection
- LLVM::DIBuilder
- LLVM::Function
- LLVM::FunctionCollection
- LLVM::FunctionPassManager::Runner
- LLVM::GlobalCollection
- LLVM::InstructionCollection
- LLVM::Metadata
- LLVM::OperandBundleDef
- LLVM::ParameterCollection
- LLVM::PassRegistry
- LLVM::PhiTable
- LLVM::Target
- LLVM::TargetData
- LLVM::Type
- LLVM::Value
- Log::Context
- Log::Emitter
- Log::Entry
- Log::Metadata::Value
- Log::StaticFormatter
- MIME::MediaType
- Path
- Pointer::Appender(T)
- Process::Tms
- Range(B, E)
- Regex::MatchData
- SemanticVersion
- SemanticVersion::Prerelease
- Set(T)
- Slice(T)
- Socket::Address
- Socket::Addrinfo
- Spec::Example::Procsy
- Spec::ExampleGroup::Procsy
- Spec::SplitFilter
- Time
- Time::Format
- Time::Location::Zone
- Time::MonthSpan
- Time::Span
- URI::Params
- UUID
- VaList
- YAML::Any
Defined in:
struct.crInstance Method Summary
- #==(other) : Bool
Returns
true
if this struct is equal to other. - #hash(hasher)
- #inspect(io : IO) : Nil
Appends this struct's name and instance variables names and values to the given IO.
- #pretty_print(pp) : Nil
- #to_s(io : IO) : Nil
Same as
#inspect(io)
.
Instance methods inherited from struct Value
==(other : JSON::Any)==(other : YAML::Any)
==(other) ==, dup dup
Instance methods inherited from class Object
! : Bool !, !=(other) !=, !~(other) !~, ==(other) ==, ===(other : JSON::Any)===(other : YAML::Any)
===(other) ===, =~(other) =~, as(type : Class) as, as?(type : Class) as?, class class, dup dup, hash(hasher)
hash hash, in?(collection : Object) : Bool
in?(*values : Object) : Bool in?, inspect(io : IO) : Nil
inspect : String inspect, is_a?(type : Class) : Bool is_a?, itself itself, nil? : Bool nil?, not_nil! not_nil!, pretty_inspect(width = 79, newline = "\n", indent = 0) : String pretty_inspect, pretty_print(pp : PrettyPrint) : Nil pretty_print, responds_to?(name : Symbol) : Bool responds_to?, tap(&) tap, to_json(io : IO) : Nil
to_json : String to_json, to_pretty_json(indent : String = " ") : String
to_pretty_json(io : IO, indent : String = " ") : Nil to_pretty_json, to_s(io : IO) : Nil
to_s : String to_s, to_yaml(io : IO) : Nil
to_yaml : String to_yaml, try(&) try, unsafe_as(type : T.class) forall T unsafe_as
Class methods inherited from class Object
from_json(string_or_io, root : String)from_json(string_or_io) from_json, from_yaml(string_or_io : String | IO) from_yaml
Instance Method Detail
def ==(other) : BoolSource
Returns true
if this struct is equal to other.
Both structs' instance vars are compared to each other. Thus, two structs are considered equal if each of their instance variables are equal. Subclasses should override this method to provide specific equality semantics.
struct Point def initialize(@x : Int32, @y : Int32) end end p1 = Point.new 1, 2 p2 = Point.new 1, 2 p3 = Point.new 3, 4 p1 == p2 # => true p1 == p3 # => false
def hash(hasher)Source
def inspect(io : IO) : NilSource
Appends this struct's name and instance variables names and values to the given IO.
struct Point def initialize(@x : Int32, @y : Int32) end end p1 = Point.new 1, 2 p1.to_s # "Point(@x=1, @y=2)" p1.inspect # "Point(@x=1, @y=2)"
def to_s(io : IO) : NilSource
Same as #inspect(io)
.
© 2012–2021 Manas Technology Solutions.
Licensed under the Apache License, Version 2.0.
https://crystal-lang.org/api/1.2.1/Struct.html