# abstract class Class

- Class
- Value
- Object

##
Defined in:

class.cr
primitives.cr

##
Constructors

- .cast(other) : self

  Casts other to this class.

##
Class Method Summary

- .<(other : T.class) : Bool forall T

  Returns whether this class inherits or includes other.

- .<=(other : T.class) : Bool forall T

  Returns whether this class inherits or includes other, or is equal to other.

- .==(other : Class) : Bool

  Returns whether this class is the same as other.

- .===(other)

  Case equality.

- .>(other : T.class) : Bool forall T

  Returns whether other inherits or includes `self`.

- .>=(other : T.class) forall T

  Returns whether other inherits or includes `self`, or is equal to `self`.

- .|(other : U.class) forall U

  Returns the union type of `self` and other.

- .clone
- .dup

  Returns a shallow copy of this object.

- .hash(hasher)

  See `Object#hash(hasher)`

- .inspect(io : IO) : Nil

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

- .name : String

  Returns the name of this class.

- .nilable? : Bool

  Returns `true` if `nil` is an instance of this type.

- .to_s(io : IO) : Nil

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

##
Instance Method Summary

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

  Returns whether this class inherits or includes other.

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

  Returns whether this class inherits or includes other, or is equal to other.

- #==(other : Class) : Bool

  Returns whether this class is the same as other.

- #===(other)

  Case equality.

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

  Returns whether other inherits or includes `self`.

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

  Returns whether other inherits or includes `self`, or is equal to `self`.

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

  Returns the union type of `self` and other.

- #cast(other) : self

  Casts other to this class.

- #clone
- #dup

  Returns a shallow copy of this object.

- #hash(hasher)

  See `Object#hash(hasher)`

- #inspect(io : IO) : Nil

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

- #name : String

  Returns the name of this class.

- #nilable? : Bool

  Returns `true` if `nil` is an instance of this type.

- #to_s(io : IO) : Nil

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

### 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 #

Casts other to this class.

This is the same as using `as`, 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 includes other.

    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 includes other, or is equal to other.

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

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

Returns whether this class is the same as other.

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

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

Case equality.

The `#===` method is used in a `case ... 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 (notably `Regex`) can override it to provide meaningful case-equality semantics.

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

Returns whether other inherits or includes `self`.

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

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

Returns whether other inherits or includes `self`, or is equal to `self`.

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

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

Returns the union type of `self` and other.

    Int32 | Char # => (Int32 | Char)

def self.clone #
def self.dup #
Description copied from struct Value

Returns a shallow copy of this object.

Because `Value` is a value type, this method returns `self`, which already involves a shallow copy of this object because value types are passed by value.

def self.hash(hasher) #

See `Object#hash(hasher)`

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

Prints to io 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 by `Struct#inspect` and `Reference#inspect`.

`::p` and `::p!` use this method to print an object in `STDOUT`.

def self.name : String #

Returns the name of this class.

    String.name # => "String"

def self.nilable? : Bool #

Returns `true` if `nil` 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, to io.

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 interpolate `self` 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 includes other.

    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 includes other, or is equal to other.

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

def ==(other : Class) : Bool #

Returns whether this class is the same as other.

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

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

Case equality.

The `#===` method is used in a `case ... 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 (notably `Regex`) can override it to provide meaningful case-equality semantics.

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

Returns whether other inherits or includes `self`.

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

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

Returns whether other inherits or includes `self`, or is equal to `self`.

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

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

Returns the union type of `self` and other.

    Int32 | Char # => (Int32 | Char)

def cast(other) : self #

Casts other to this class.

This is the same as using `as`, 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.

Because `Value` is a value type, this method returns `self`, which already involves a shallow copy of this object because value types are passed by value.

def hash(hasher) #

See `Object#hash(hasher)`

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

Prints to io 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 by `Struct#inspect` and `Reference#inspect`.

`::p` and `::p!` use this method to print an object in `STDOUT`.

def name : String #

Returns the name of this class.

    String.name # => "String"

def nilable? : Bool #

Returns `true` if `nil` 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, to io.

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 interpolate `self` in a string literal or call `io << self` which both would lead to an endless loop.

Also see `#inspect(IO)`.