View source code
Display the source code in std/typecons.d from which this
page was generated on github.
Report a bug
If you spot a problem with this page, click here to create a
Bugzilla issue.
Improve this page
Quickly fork, edit online, and submit a pull request for this page.
Requires a signed-in GitHub account. This works well for small changes.
If you'd like to make larger changes you may want to consider using
local clone.
Template std.typecons.apply
Unpacks the content of a Nullable
, performs an operation and packs it again. Does nothing if isNull.
template apply(alias fun)
;
When called on a Nullable
, apply
will unpack the value contained in the Nullable
,
pass it to the function you provide and wrap the result in another Nullable
(if necessary).
If the Nullable
is null, apply
will return null itself.
Contained Functions
Name | Description |
---|---|
apply |
Parameters
Name | Description |
---|---|
t | a Nullable |
fun | a function operating on the content of the nullable |
Returns
fun(t
if !t
, else Nullable
.
See also:
The Maybe
monad
Example
alias toFloat = i => cast(float) i;
Nullable!int sample;
// apply(null) results in a null `Nullable` of the function's return type.
Nullable!float f = sample .apply!toFloat;
assert(sample .isNull && f .isNull);
sample = 3;
// apply(non-null) calls the function and wraps the result in a `Nullable`.
f = sample .apply!toFloat;
assert(!sample .isNull && !f .isNull);
writeln(f .get); // 3.0f
Example
alias greaterThree = i => (i > 3) ? i .nullable : Nullable!(typeof(i)) .init;
Nullable!int sample;
// when the function already returns a `Nullable`, that `Nullable` is not wrapped.
auto result = sample .apply!greaterThree;
assert(sample .isNull && result .isNull);
// The function may decide to return a null `Nullable`.
sample = 3;
result = sample .apply!greaterThree;
assert(!sample .isNull && result .isNull);
// Or it may return a value already wrapped in a `Nullable`.
sample = 4;
result = sample .apply!greaterThree;
assert(!sample .isNull && !result .isNull);
writeln(result .get); // 4
Authors
Andrei Alexandrescu, Bartosz Milewski, Don Clugston, Shin Fujishiro, Kenji Hara
License
Copyright © 1999-2022 by the D Language Foundation | Page generated by ddox.