Sono sicuro che c'è una buona ragione per questo, ma non lo vedo.Option.fold - perché il suo secondo argomento non è un operatore binario?
Fold
su (diciamo) List
ritorni
il risultato dell'applicazione dell'operatore piega
op
fra tutti gli elementi ez
Ha una evidente relazione con foldLeft
e foldRight
che fare la stessa cosa ma con ordine definito (e quindi non sono necessari operatori associativi)
Fold
su Option
rendimenti
Restituisce il risultato dell'applicazione di
f
a questoscala.Option
's valore se ilscala.Option
è non vuota. In caso contrario, valuta l'espressioneifEmpty
.
ifEmpty
è (nella posizione del) z
per un elenco. f
è (nella posizione del) op
Per None
(che, usando il mio modello mentale di Option
come un "contenitore" che può o non può contenere un valore, è un contenitore "vuoto"), le cose sono OK , Option.fold
restituisce lo zero (valore di ifEmpty
).
Per Some(x)
, però, non f
dovrebbe prendere due params, z
e x
quindi è coerente con il fold
su sequenze (compreso avere una relazione simile al foldLeft
e foldRight
).
C'è sicuramente un argomento di utilità contro questo: avere f
basta prendere x
come parametro in pratica probabilmente più conveniente. Nella maggior parte dei casi, se lo fosse, prendeva anche z
che verrebbe ignorato. Ma anche la coerenza è importante ...
Quindi qualcuno può spiegarmi perché l'opzione fold
su Option è ancora "corretta" fold
?
Ma "Some # fold" richiede 2 argomenti. https://github.com/scala/scala/blob/v2.11.3/src/library/scala/Option.scala#L1 Mi dispiace non capisco la domanda – Jatin
Ha effettivamente due argomenti; ma gli argomenti sono solo in elenchi di argomenti separati. – Jesper
Sto chiedendo perché il secondo argomento non è un operatore binario. Non perché fold se stesso prende due argomenti - come tu dici, lo fa! –