Nil
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!
See Nil literal in the language reference.
Constructors
Instance methods
Raises NilAssertionError.
If message is given, it is forwarded as error message of NilAssertionError.
See also: Object#not_nil!.
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.
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