Mojo struct
Optional
struct Optional[T: Copyable & Movable]
A type modeling a value which may or may not be present.
Optional values can be thought of as a type-safe nullable pattern.
Your value can take on a value or None
, and you need to check
and explicitly extract the value to get it out.
Currently T is required to be a Copyable & Movable
so we can implement
copy/move for Optional and allow it to be used in collections itself.
Examples:
var a = Optional(1)
var b = Optional[Int](None)
if a:
print(a.value()) # prints 1
if b: # Bool(b) is False, so no print
print(b.value())
var c = a.or_else(2)
var d = b.or_else(2)
print(c) # prints 1
print(d) # prints 2
var a = Optional(1)
var b = Optional[Int](None)
if a:
print(a.value()) # prints 1
if b: # Bool(b) is False, so no print
print(b.value())
var c = a.or_else(2)
var d = b.or_else(2)
print(c) # prints 1
print(d) # prints 2
Parameters
- T (
Copyable & Movable
): The type of value stored in theOptional
.
Implemented traits
AnyType
,
Boolable
,
Copyable
,
ExplicitlyCopyable
,
Movable
,
UnknownDestructibility
Methods
__init__
__init__(out self)
Construct an empty Optional
.
@implicit
__init__(out self, owned value: T)
Construct an Optional
containing a value.
Args:
- value (
T
): The value to store in theOptional
.
@implicit
__init__(out self, value: NoneType)
Construct an empty Optional
.
Args:
- value (
NoneType
): Must be exactlyNone
.
__bool__
__bool__(self) -> Bool
Return true if the Optional has a value.
Returns:
True if the Optional
has a value and False otherwise.
__getitem__
__getitem__(ref self) -> ref [$1._value] T
Retrieve a reference to the value inside the Optional
.
Returns:
A reference to the value inside the Optional
.
Raises:
On empty Optional
.
__invert__
__invert__(self) -> Bool
Return False if the Optional
has a value.
Returns:
False if the Optional
has a value and True otherwise.
__eq__
__eq__(self, rhs: NoneType) -> Bool
Return True
if a value is not present.
Args:
- rhs (
NoneType
): TheNone
value to compare to.
Returns:
True
if a value is not present, False
otherwise.
__eq__[T: EqualityComparable & Copyable & Movable](self: Optional[T], rhs: Optional[T]) -> Bool
Return True
if this is the same as another Optional
value, meaning both are absent, or both are present and have the same underlying value.
Parameters:
- T (
EqualityComparable & Copyable & Movable
): The type of the elements in the list. Must implement the traitsCopyable
,Movable
andEqualityComparable
.
Args:
- rhs (
Optional[T]
): The value to compare to.
Returns:
True if the values are the same.
__ne__
__ne__(self, rhs: NoneType) -> Bool
Return True
if a value is present.
Args:
- rhs (
NoneType
): TheNone
value to compare to.
Returns:
False
if a value is not present, True
otherwise.
__ne__[T: EqualityComparable & Copyable & Movable, //](self: Optional[T], rhs: Optional[T]) -> Bool
Return False
if this is the same as another Optional
value, meaning both are absent, or both are present and have the same underlying value.
Parameters:
- T (
EqualityComparable & Copyable & Movable
): The type of the elements in the list. Must implement the traitsCopyable
,Movable
andEqualityComparable
.
Args:
- rhs (
Optional[T]
): The value to compare to.
Returns:
False if the values are the same.
__is__
__is__(self, other: NoneType) -> Bool
Return True
if the Optional has no value.
Notes:
It allows you to use the following syntax:
if my_optional is None:
.
Args:
- other (
NoneType
): The value to compare to (None).
Returns:
True if the Optional has no value and False otherwise.
__isnot__
__isnot__(self, other: NoneType) -> Bool
Return True
if the Optional has a value.
Notes:
It allows you to use the following syntax:
if my_optional is not None:
.
Args:
- other (
NoneType
): The value to compare to (None).
Returns:
True if the Optional has a value and False otherwise.
copy
copy(self) -> Self
Copy construct an Optional
.
Returns:
A copy of the value.
__str__
__str__[U: Copyable & Movable & Representable, //](self: Optional[U]) -> String
Return the string representation of the value of the Optional
.
Parameters:
- U (
Copyable & Movable & Representable
): The type of the elements in the list. Must implement the traitsRepresentable
,Copyable
andMovable
.
Returns:
A string representation of the Optional
.
__repr__
__repr__[U: Representable & Copyable & Movable, //](self: Optional[U]) -> String
Returns the verbose string representation of the Optional
.
Parameters:
- U (
Representable & Copyable & Movable
): The type of the elements in the list. Must implement the traitsRepresentable
,Copyable
andMovable
.
Returns:
A verbose string representation of the Optional
.
write_to
write_to[W: Writer, U: Representable & Copyable & Movable, //](self: Optional[U], mut writer: W)
Write Optional
string representation to a Writer
.
Parameters:
- W (
Writer
): A type conforming to the Writable trait. - U (
Representable & Copyable & Movable
): The type of the elements in the list. Must implement the traitsRepresentable
,Copyable
andMovable
.
Args:
- writer (
W
): The object to write to.
value
value(ref self) -> ref [$1._value] T
Retrieve a reference to the value of the Optional
.
Notes:
This will abort on empty Optional
.
Returns:
A reference to the contained data of the Optional
as a reference.
unsafe_value
unsafe_value(ref self) -> ref [$1._value] T
Unsafely retrieve a reference to the value of the Optional
.
Notes:
This will not abort on empty Optional
.
Returns:
A reference to the contained data of the Optional
as a reference.
take
take(mut self) -> T
Move the value out of the Optional
.
Notes:
This will abort on empty Optional
.
Returns:
The contained data of the Optional
as an owned T value.
unsafe_take
unsafe_take(mut self) -> T
Unsafely move the value out of the Optional
.
Notes:
This will not abort on empty Optional
.
Returns:
The contained data of the Optional
as an owned T value.
or_else
or_else(self, default: T) -> T
Return the underlying value contained in the Optional
or a default value if the Optional
's underlying value is not present.
Args:
- default (
T
): The new value to use if no value was present.
Returns:
The underlying value contained in the Optional
or a default value.
copied
copied[mut: Bool, origin: Origin[mut], //, T: Copyable & Movable](self: Optional[Pointer[T, origin]]) -> Optional[T]
Converts an Optional
containing a Pointer to an Optional
of an owned value by copying.
Examples:
Copy the value of an Optional[Pointer[_]]
var data = String("foo")
var opt = Optional(Pointer(to=data))
var opt_owned: Optional[String] = opt.copied()
var data = String("foo")
var opt = Optional(Pointer(to=data))
var opt_owned: Optional[String] = opt.copied()
Notes:
If self
is an empty Optional
, the returned Optional
will be
empty as well.
Parameters:
- mut (
Bool
): Mutability of the pointee origin. - origin (
Origin[mut]
): Origin of the containedPointer
. - T (
Copyable & Movable
): Type of the owned result value.
Returns:
An Optional
containing an owned copy of the pointee value.
Was this page helpful?
Thank you! We'll create more content like this.
Thank you for helping us improve!