İstisnaları kaydeden ve devam ettiren bir try-catch bloğuyla istisnalar atabilecek bir kod yazmak istiyorum. gibi bir şey: İdealScala'da "this" kelimesini implicit parametresi olarak vermek mümkün mü?
loggingExceptions {
// something dangerous
}
, ben eğer herhangi biri (ve hiçbiri bir derleme zamanı hatası alırsanız), çağıran nesne üzerinde tanımlı Logger giriş için kullanmak istiyorum. Böyle bir şey tanımlamak isteriz:
def loggingExceptions[L <: { def logger: Logger }](work: => Unit)(implicit objectWithLogger: L): Unit = {
try {
work
} catch {
case t: Exception => objectWithLogger.logger.error(t.getMessage)
}
}
objectWithLogger bir şekilde "sihirli" "Bu" istemci kod genişletmek vermesi. Bu (veya benzer bir şey) mümkün mü?
+1. Bu _can_ yapılabilir, ama bu tavsiye edilmez. Kayıt kaygısının yanı sıra günlüğe kaydetme özelliğini ayırmaz, "örtülü sihir" gerektirir ve gereksiz derleme zamanına (örtülü arama) ve çalışma zamanı (yansıma) yüküne neden olur. Uygulama, örtülü dönüşümün kapsam dahilinde olması gerektiğini ve daha gerçekçi bir kod tabanında, bu, müşteri kodunda bir içe aktarım ifadesi gerektireceğini gizler. –
Negatifler listenizin listesi "Farklı bir problemi çözmeyi tercih ederim." Evet, hepimiz olmazdık. – extempore
Gerçekten değil. Temel sorun, bir kayıt defterine sahip bir sınıftaki bir kod bloğundaki istisnaları günlüğe kaydetmektir. Bu problemi, OP'nin ilk bakışta öngördüğü şekilde (dolaylı olarak) çözebilir ya da bir özelliği daha basit bir şekilde çözebilirsiniz. –