struct Nil
Overview
TheNil 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 ornil 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 bothInt32 andNil 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 withnil,
such asObject#try andObject#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!
SeeNil literal in the language reference.
Defined in:
json/to_json.crnil.cr
uri/params/to_www_form.cr
yaml/to_yaml.cr
Constructors
Instance Method Summary
-
#==(other : Nil)
Returns
true:Nilhas only one singleton value:nil. - #clone
- #hash(hasher)
-
#inspect(io : IO) : Nil
Writes
"nil"to the givenIO. -
#inspect : String
Returns
"nil". -
#not_nil!(message = nil) : NoReturn
Raises
NilAssertionError. -
#object_id : UInt64
Returns
0_u64. -
#presence : Nil
Returns
self. -
#same?(other : Nil)
Returns
true:Nilhas only one singleton value:nil. -
#same?(other : Reference) : Bool
Returns
false. - #to_json(json : JSON::Builder) : Nil
- #to_json_object_key : String
-
#to_s(io : IO) : Nil
Doesn't write anything to the given
IO. -
#to_s : String
Returns an empty string.
- #to_yaml(yaml : YAML::Nodes::Builder) : Nil
-
#try(&)
Doesn't yield to the block.
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
Instance Method Detail
RaisesNilAssertionError.
Ifmessage is given, it is forwarded as error message ofNilAssertionError.
See also:Object#not_nil!.
Returns0_u64. Even thoughNil is not aReference type, it is usually
mixed with them to form nilable types so it's useful to have an
object id fornil.
Returnsself.
This method enables to call the#presence method (seeString#presence) on a union withNil.
The idea is to returnnil when the value isnil or empty.
config = {"empty" => ""}
config["empty"]?.presence # => nil
config["missing"]?.presence # => nil