W3cubDocs

/Crystal

struct Nil

Overview

The Nil type has only one possible value: nil.

nil is commonly used to represent the absence of a value. For example, String#index returns the position of the character or nil if it's not in the string:

str = "Hello world"
str.index 'e' # => 1
str.index 'a' # => nil

In the above example, trying to invoke a method on the returned value will give a compile time error unless both Int32 and Nil define that method:

str = "Hello world"
idx = str.index 'e'
idx + 1 # Error: undefined method '+' for Nil

The language and the standard library provide short, readable, easy ways to deal with nil, such as Object#try and Object#not_nil!:

str = "Hello world"

# The index of 'e' in str or 0 if not found
idx1 = str.index('e') || 0

idx2 = str.index('a')
if idx2
  # Compiles: idx2 can't be nil here
  idx2 + 1
end

# Tell the compiler that we are sure the returned
# value is not nil: raises a runtime exception
# if our assumption doesn't hold.
idx3 = str.index('o').not_nil!

Defined in:

json/to_json.cr
nil.cr
yaml/to_yaml.cr

Constructors

Instance Method Summary

Constructor Detail

def self.new(ctx : YAML::ParseContext, node : YAML::Nodes::Node)Source

def self.new(pull : JSON::PullParser)Source

Instance Method Detail

def ==(other : Nil)Source

Returns true: Nil has only one singleton value: nil.

def cloneSource

def hash(hasher)Source

def inspect(io : IO) : NilSource

Writes "nil" to the given IO.

def inspect : StringSource

Returns "nil".

def not_nil!Source

Raises NilAssertionError.

See also: Object#not_nil!.

def object_idSource

Returns 0_u64. Even though Nil is not a Reference type, it is usually mixed with them to form nilable types so it's useful to have an object id for nil.

def presenceSource

Returns self. This method enables to call the #presence method (see String#presence) on a union with Nil. The idea is to return nil when the value is nil or empty.

config = {"empty" => ""}
config["empty"]?.presence   # => nil
config["missing"]?.presence # => nil

def same?(other : Nil)Source

Returns true: Nil has only one singleton value: nil.

def same?(other : Reference)Source

Returns false.

def to_json(json : JSON::Builder)Source

def to_json_object_keySource

def to_s(io : IO) : NilSource

Doesn't write anything to the given IO.

def to_s : StringSource

Returns an empty string.

def to_yaml(yaml : YAML::Nodes::Builder)Source

def try(&)Source

Doesn't yield to the block.

See also: Object#try.

© 2012–2020 Manas Technology Solutions.
Licensed under the Apache License, Version 2.0.
https://crystal-lang.org/api/0.35.1/Nil.html