Ben özellikle Either
gibi ve onunla korkunç aşina değilim sonuç olarak yapmak, ama projeksiyonlar aradığınız inanıyoruz: either.left.getOrElse
veya either.right.getOrElse
. çıkıntılar gibi iyi comprehensions için de kullanılabileceğini
not edin. Bu düz belgelerinden bir örnek:
def interactWithDB(x: Query): Either[Exception, Result] =
try {
Right(getResultFromDatabase(x))
} catch {
case ex => Left(ex)
}
// this will only be executed if interactWithDB returns a Right
val report =
for (r <- interactWithDB(someQuery).right) yield generateReport(r)
if (report.isRight)
send(report)
else
log("report not generated, reason was " + report.left.get)
Neden 'Either' gibi değil mi? –
@Kevin Bu sadece benim kişisel görüşümdür, ancak yararlı olduğu iki durum olduğunu görüyorum: bir başarısızlık ya da başarıya geri dönmek ya da iki olası sonuçtan birini iade etmek. Birincisi bir 'Try' kullanılarak daha iyi sunulmakta ve ikincisi özensiz programlama gibi görünmektedir - eğer metodum bir' String' veya 'Date' iadesi durumunda, bazı refactoring ile yapılabilir. –
Bir başarı veya başarısızlık döndürmek için bir doğrulama çerçevesinde yararlı olduğunu düşünüyorum. Genel API, daha sonra, özel durumdaki durumdaki sınıflar olduğunda bile, iade edilen istisnaların garip kullanımını önlerken, ne tür bir başarı/başarısızlık sağlayabileceğini açıkça belirtir. Şu anda üzerinde çalıştığım bir örnek, bazı doğrulamalara dayanan bir etkinlik gönderen bir etkinlik kaynağı çerçevesidir. Bunun * hissediyorum @Guillaume Bu olayın beklenen türü veya "Geçersiz olay" – Guillaume