FoldBack
Cria um novo valor do tipo TState
aplicando a função folder ao valor either
de acordo com seu estado.
Parâmetros | Retorno |
---|---|
Func<TRight, TState, TState> folderWhenRight Func<TLeft, TState, TState> folderWhenLeft Either<TLeft, TRight> either TState state |
TState |
Como usar
Esta função realiza uma transformação de um Either<TLeft, TRight>
para um TState ao aplicar a função folder, semelhante ao Fold
. A única diferença entre este método e o método Fold
é sua ordem de parâmetros e a ordem de parâmetros de suas funções folderWhen
.
Quando o valor Either está no estado IsRight
int state = 20
Either<string, int> eitherValue = 22;
int result =
eitherValue.FoldBack(
(right, _state) => right + _state,
(left, _state) => _state + 10,
state);
//result = 42
Quando o valor Either está no estado IsLeft
int state = 20
Either<string, int> eitherValue = 22;
int result =
eitherValue.FoldBack(
(right, _state) => right + _state,
(left, _state) => _state + 10,
state);
//result = 30
Abordagens para apenas um dos lados
Você pode utilizar os métodos FoldBackLeft
e FoldBackRight
para obter o mesmo resultado, mas desta vez aplicando a função em somente um dos valores.
Sempre que estas funções forem aplicados para valores Either
que não estão do mesmo tipo que a função de avaliação será retornado o valor state
informado por parâmetro.
FoldBackRight Quando o valor Either está no estado IsRight
int state = 20
Either<string, int> eitherValue = 22;
int result =
eitherValue.FoldBackRight(
(right, _state) => right + _state,
state);
//result = 42
FoldBackRight Quando o valor Either está no estado IsLeft
int state = 20
Either<string, int> eitherValue = "ERROR";
int result = eitherValue.FoldBackRight(
(right, _state) => right + _state,
state);
//result = 20
FoldBackLeft Quando o valor Either está no estado IsRight
int state = 20
Either<string, int> eitherValue = 22;
int result = eitherValue.FoldBackLeft(
(left, _state) => _state + 10,
state);
//result = 20