Options and variants
Options
In SmartPy usage of the value None
is reflected in the type: for example, an optional integer is of type sp.option[sp.int]
. This type is inhabited by None
and by sp.Some(n)
for any value n
of type sp.int
.
- x.is_none() → sp.bool
Checks whether the given value is
None
. For exampleNone.is_none() == True
andsp.Some(42).is_none() == False
- x.is_some() → sp.bool
Checks whether the given value is of the form
sp.Some(...)
. For exampleNone.is_some() == False
andsp.Some(42).is_some() == True
.
- x.unwrap_some([error]) → t
Extracts the argument of an option value if it is of the form
sp.Some(...)
. Raises an exception (that can be specified aserror
) ifx == None
.For example,
sp.Some(42).unwrap_some() == 42
, whereasNone.unwrap_some("oops")
raises the exception"oops"
.
Variants
Variants in SmartPy are enumerations of cases, where each case comes with an extra value. In other languages similar features, such as enums, sum types, and tagged/disjoint unions, exist.
For example, sp.variant(Circle=sp.int, Rectangle=sp.pair[sp.int, sp.int])
is a variant type with two cases. Its values are sp.variant.Circle(r)
(for any r
of type sp.int
) and sp.variant.Rectangle(h, w)
(for any h
and w
of type sp.int
).