abstract class Class

Defined in:

class.cr
primitives.cr

Constructors

Class Method Summary

Instance Method Summary

Instance methods inherited from struct Value

==(other : Log::Metadata::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!(message)
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 : String | IO, root : String)
from_json(string_or_io : String | IO)
from_json
, from_yaml(string_or_io : String | IO) from_yaml

Macros inherited from class Object

class_getter(*names, &block) class_getter, class_getter!(*names) class_getter!, class_getter?(*names, &block) class_getter?, class_property(*names, &block) class_property, class_property!(*names) class_property!, class_property?(*names, &block) class_property?, class_setter(*names) class_setter, def_clone def_clone, def_equals(*fields) def_equals, def_equals_and_hash(*fields) def_equals_and_hash, def_hash(*fields) def_hash, delegate(*methods, to object) delegate, forward_missing_to(delegate) forward_missing_to, getter(*names, &block) getter, getter!(*names) getter!, getter?(*names, &block) getter?, property(*names, &block) property, property!(*names) property!, property?(*names, &block) property?, setter(*names) setter

Constructor Detail

def self.cast(other) : self #

Castsother to this class.

This is the same as usingas, but allows the class to be passed around as an argument. See the documentation on as for more information.

klass = Int32
number = [99, "str"][0]
typeof(number)             # => (String | Int32)
typeof(klass.cast(number)) # => Int32

Class Method Detail

def self.<(other : T.class) : Bool forall T #

Returns whether this class inherits or includesother.

Int32 < Number  # => true
Int32 < Value   # => true
Int32 < Int32   # => false
Int32 <= String # => false

def self.<=(other : T.class) : Bool forall T #

Returns whether this class inherits or includesother, or is equal toother.

Int32 < Number  # => true
Int32 < Value   # => true
Int32 <= Int32  # => true
Int32 <= String # => false

def self.==(other : Class) : Bool #

Returns whether this class is the same asother.

Int32 == Int32  # => true
Int32 == String # => false

def self.===(other) #
Description copied from class Object

Case equality.

The#=== method is used in acase ... when ... end expression.

For example, this code:

case value
when x
  # something when x
when y
  # something when y
end

Is equivalent to this code:

if x === value
  # something when x
elsif y === value
  # something when y
end

Object simply implements#=== by invoking#==, but subclasses (notablyRegex) can override it to provide meaningful case-equality semantics.


def self.>(other : T.class) : Bool forall T #

Returns whetherother inherits or includesself.

Number > Int32  # => true
Number > Number # => false
Number > Object # => false

def self.>=(other : T.class) forall T #

Returns whetherother inherits or includesself, or is equal toself.

Number >= Int32  # => true
Number >= Number # => true
Number >= Object # => false

def self.|(other : U.class) forall U #

Returns the union type ofself andother.

Int32 | Char # => (Int32 | Char)

def self.clone #

def self.dup #
Description copied from struct Value

Returns a shallow copy of this object.

BecauseValue is a value type, this method returnsself, which already involves a shallow copy of this object because value types are passed by value.


def self.hash(hasher) #

def self.inspect(io : IO) : Nil #
Description copied from class Object

Prints toio an unambiguous and information-rich string representation of this object, typically intended for developers.

It is similar to#to_s(IO), but often provides more information. Ideally, it should contain sufficient information to be able to recreate an object with the same value (given an identical environment).

For types that don't provide a custom implementation of this method, default implementation delegates to#to_s(IO). This said, it is advisable to have an appropriate#inspect implementation on every type. Default implementations are provided byStruct#inspect andReference#inspect.

::p and::p! use this method to print an object inSTDOUT.


def self.name : String #

Returns the name of this class.

String.name # => "String"

def self.nilable? : Bool #

Returnstrue ifnil is an instance of this type.

Int32.nilable?            # => false
Nil.nilable?              # => true
(Int32 | String).nilable? # => false
(Int32 | Nil).nilable?    # => true
NoReturn.nilable?         # => false
Value.nilable?            # => true

def self.to_s(io : IO) : Nil #
Description copied from class Object

Prints a nicely readable and concise string representation of this object, typically intended for users, toio.

This method is called when an object is interpolated in a string literal:

"foo #{bar} baz" # calls bar.to_io with the builder for this string

IO#<< calls this method to append an object to itself:

io << bar # calls bar.to_s(io)

Thus implementations must not interpolateself in a string literal or call io << self which both would lead to an endless loop.

Also see#inspect(IO).


Instance Method Detail

def <(other : T.class) : Bool forall T #

Returns whether this class inherits or includesother.

Int32 < Number  # => true
Int32 < Value   # => true
Int32 < Int32   # => false
Int32 <= String # => false

def <=(other : T.class) : Bool forall T #

Returns whether this class inherits or includesother, or is equal toother.

Int32 < Number  # => true
Int32 < Value   # => true
Int32 <= Int32  # => true
Int32 <= String # => false

def ==(other : Class) : Bool #

Returns whether this class is the same asother.

Int32 == Int32  # => true
Int32 == String # => false

def ===(other) #
Description copied from class Object

Case equality.

The#=== method is used in acase ... when ... end expression.

For example, this code:

case value
when x
  # something when x
when y
  # something when y
end

Is equivalent to this code:

if x === value
  # something when x
elsif y === value
  # something when y
end

Object simply implements#=== by invoking#==, but subclasses (notablyRegex) can override it to provide meaningful case-equality semantics.


def >(other : T.class) : Bool forall T #

Returns whetherother inherits or includesself.

Number > Int32  # => true
Number > Number # => false
Number > Object # => false

def >=(other : T.class) forall T #

Returns whetherother inherits or includesself, or is equal toself.

Number >= Int32  # => true
Number >= Number # => true
Number >= Object # => false

def |(other : U.class) forall U #

Returns the union type ofself andother.

Int32 | Char # => (Int32 | Char)

def cast(other) : self #

Castsother to this class.

This is the same as usingas, but allows the class to be passed around as an argument. See the documentation on as for more information.

klass = Int32
number = [99, "str"][0]
typeof(number)             # => (String | Int32)
typeof(klass.cast(number)) # => Int32

def clone #

def dup #
Description copied from struct Value

Returns a shallow copy of this object.

BecauseValue is a value type, this method returnsself, which already involves a shallow copy of this object because value types are passed by value.


def hash(hasher) #

def inspect(io : IO) : Nil #
Description copied from class Object

Prints toio an unambiguous and information-rich string representation of this object, typically intended for developers.

It is similar to#to_s(IO), but often provides more information. Ideally, it should contain sufficient information to be able to recreate an object with the same value (given an identical environment).

For types that don't provide a custom implementation of this method, default implementation delegates to#to_s(IO). This said, it is advisable to have an appropriate#inspect implementation on every type. Default implementations are provided byStruct#inspect andReference#inspect.

::p and::p! use this method to print an object inSTDOUT.


def name : String #

Returns the name of this class.

String.name # => "String"

def nilable? : Bool #

Returnstrue ifnil is an instance of this type.

Int32.nilable?            # => false
Nil.nilable?              # => true
(Int32 | String).nilable? # => false
(Int32 | Nil).nilable?    # => true
NoReturn.nilable?         # => false
Value.nilable?            # => true

def to_s(io : IO) : Nil #
Description copied from class Object

Prints a nicely readable and concise string representation of this object, typically intended for users, toio.

This method is called when an object is interpolated in a string literal:

"foo #{bar} baz" # calls bar.to_io with the builder for this string

IO#<< calls this method to append an object to itself:

io << bar # calls bar.to_s(io)

Thus implementations must not interpolateself in a string literal or call io << self which both would lead to an endless loop.

Also see#inspect(IO).