Eu escrevi a seguinte função Rust, que contém um encerramento.
fn has_a_none_element(&self) -> bool {
let elements_is_none =
self.elements.iter().flatten().map(Option::is_none);
let optional_any_is_none =
elements_is_none.reduce(
|lhs, rhs| {
lhs || rhs
}
);
match optional_any_is_none {
None => false,
Some(any_is_none) => any_is_none,
}
}
self.elements
é do tipo Vec<Vec<Option<f64>>>
, embora isso não seja particularmente importante.
O que importa é o fechamento:
|lhs, rhs| {
lhs || rhs
}
Esta é uma função "Ou". É o tipo de coisa que se poderia esperar que já existisse uma função embutida para a qual poderia ser usada como parte de um encerramento.
Será que tal coisa existe?
Dirigindo-se diretamente ao título, não há nenhuma função nomeada na biblioteca padrão para expressar o
||
operador. Outros operadores podem ser nomeados como,And::and
mas como lógico-or está disponível apenas parabool
estruturas personalizadas e não personalizadas, isso não é uma coisa.Porém, um comportamento adjacente está disponível através do
|
operador (também conhecido comoBitOr
trait) e tem comportamento idêntico ao||
debool
s além do curto-circuito. Usando isso, podemos obter isso:Porém, abordando o objetivo final, @interjay está correto ao afirmar que toda a sua função pode ser melhor expressa usando
.any()
: