Derleyici, örtük kapsamda bir implicit (Double, Double) => Double
ararsa, ya daha yüksek önceliğe sahip tam olarak bir tane vardır ve her ikisini birden seçer ya da yoktur (örtük kapsamda hiçbiri yoktur, ya da daha fazla) en yüksek önceliğe sahip olan) ve örtülü bir değer eksikliğinden dolayı bir hata olacaktır.
Eğer ayırt etmek isterseniz, ikisi de Function2'yi [Double, Double, Double] genişleten iki farklı türünüz olabilir. Örneğin, her iki işlemi bağımsız olarak seçmek mantıklı olabilir. İki seçenek conistent gerekiyorsa, bunu "doğal" örtük kapsamında uygun operasyonları olsun, yalnızca son olarak, tüm bu yararlıdır hem operasyon
trait Ring {
def add(x: Double, y: Double): Double
def mult(x: Double, y: Double): Double
}
// or `case class Ring(
// addition: (Double, Double) => Double,
// multiplication: (Double, Double) => Double)
class Example(implicit ring: Ring)
ile sadece bir özelliği olması daha mantıklı olabilir. Yapmanız varsa siz de açık olabilir
implicit val addition = ...
implicit val multiplication =
new Example
olduğu gibi bir örnek oluşturmak her zaman onları örtülü olun. aramaların çoğu aynı değere çalışmak bekleniyor ve eğer
Ayrıca, sadece birkaç tanesi değiştirmek istiyorum, yerine varsayılan değerlerle bağımsız değişkenler için gidebileceğini
class Example(doSomething1 : (Double, Double) => Double = <default value>, doSomething2 ...)
Hatta olabilir her ikisi de, varsayılan değer ile örtülü bir argüman. Bunu yaparsanız, örtük bir değer bulunmadığında varsayılan değer kullanılır.