maarky/singlecontainer

SingleContainer monads 的接口

1.0.0 2018-02-23 22:53 UTC

This package is auto-updated.

Last update: 2024-08-29 04:08:53 UTC


README

SingleContainer 是创建 monads 的接口。想法是你可以创建一个容器来包裹单个值,或者没有值,然后在该值上执行操作,并创建包含该值或对该值执行操作的结果的新 monads。

尽管它不必这样实现,但想法是 SingleContainer 应该期待特定类型的值。例如,一种类型的 SingleContainer 可能只包含字符串。这提供了类型安全,允许你应用函数,有信心该函数能够操作容器中存储的值的类型。

文档

这些方法中的许多都接受可调用的参数。这些方法有两种类型:那些其容器包含值的,以及那些其容器不包含值的。对于那些期望容器有值的那些方法,可调用必须始终将那个值作为第一个和唯一的必需参数。对于那些不期望容器有值的方法,可调用可以可选地只接受容器作为其唯一参数。将容器传递给可调用的原因是,容器可能包含额外的信息。例如,如果容器没有值,那么可调用可能想知道调用它的容器类型,以便提供上下文,知道它应该做什么。

期望容器有值的那些方法是 map(),flatmap(),filter(),filternot() 和 foreach()。

期望容器没有值的那些方法是 getOrCall(),orCall() 和 fornothing()。

get()

检索容器值。如果容器没有值,必须抛出类型错误。

getOrElse($else)

检索容器值,如果没有值则返回 $else。如果容器没有值且 $else 与容器应具有的类型不同,必须抛出类型错误。换句话说,如果容器打算存储字符串,则 $else 必须是字符串。

getOrCall(callable $call)

检索容器值,如果没有值则调用 $call 并返回结果。如果容器没有值且 $call 返回与容器应具有的类型不同的类型,必须抛出类型错误。换句话说,如果容器打算存储字符串,则 $call 必须返回字符串。

$call 应具有签名 function(SingleContainer $container): mixed,其中 $container 是调用的 SingleContainer,mixed 是容器应存储的同数据类型。

orElse(SingleContainer $else)

如果容器有值,则返回容器,否则返回 $else。

orCall(callable $call): SingleContainer

如果容器有值,则返回容器,否则调用 $call 并返回其值。

$call 应具有签名 function(SingleContainer $container): SingleContainer,其中 $container 是调用的 SingleContainer。

isDefined(): bool

如果容器有值,则返回 true,否则返回 false。

isEmpty(): bool

如果容器有值,则返回 false,否则返回 true。

filter(callable $filter): SingleContainer

调用 filter 并传入容器值。如果 filter 返回 true,则返回自身,否则返回同一类型的空容器。如果在这个空容器上调用此方法,则没有要过滤的内容,因此应该忽略 $filter 并返回自身。

$filter 应具有签名 function(mixed $var): boolean,其中 $var 是调用 SingleContainer 中存储的数据。

filterNot(callable $filter): 单容器

filter() 方法的逆操作。如果 $filter 返回 false,则应返回自身,否则应返回一个空容器。

map(callable $map): 单容器

如果容器有值,则应调用 $map 并传入该值。$map 应返回一个要包装在 SingleContainer 中的值。如果 $map 返回 SingleContainer,则应将其包装在另一个 SingleContainer 中。如果 $map 返回空值,则应返回一个空的 SingleContainer。如果调用容器没有值,则应忽略 $map 并返回自身。

$map 应具有签名 function(mixed $var): mixed,其中 $var 是调用 SingleContainer 中存储的数据。

flatMap(callable $map): 单容器

如果容器有值,则应调用 $map 并传入该值。$map 必须返回任何类型的 SingleContainer。如果容器没有值,则应忽略 $map 并返回自身。

$map 应具有签名 function(mixed $var): SingleContainer,其中 $var 是调用 SingleContainer 中存储的数据。

foreach(callable $each): 单容器

如果容器有值,则调用 $each 并对结果不做任何处理。然后返回自身。如果容器没有值,则忽略 $each 并返回自身。

此方法用于产生副作用,而不是用于更改容器值。

$each 应具有签名 function(mixed $var): void,其中 $var 是调用 SingleContainer 中存储的数据。

fornothing(callable $nothing): 单容器

如果容器有值,则忽略 $nothing 并返回自身。如果容器没有值,则调用 $nothing 并对结果不做任何处理。然后返回自身。

此方法用于产生副作用。

$nothing 应具有签名 function(SingleContainer $container): void,其中 $container 是调用 SingleContainer。

equals($value): bool

确定两个容器是否相等。它们必须是相同的容器类。它们还必须有相同的值,或者它们都必须为空。