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.