컴파일러가 암시 적 범위에서 implicit (Double, Double) => Double
을 찾으면 더 높은 우선 순위를 가진 정확히 하나가 있고 둘 중 하나를 선택하거나 그렇지 않은 경우 (암시 적 범위에 아무 것도 없거나 하나는 우선 순위가 가장 높음) 암시적인 값이 부족하다는 오류가 발생합니다.
구분하려면 두 가지 유형이 있으며 둘 다 Function2 [Double, Double, Double]를 확장하십시오. 예를 들어
trait Addition extends Function[Double, Double, Double]
trait Multiplication extends Function[Double, Double, Double]
class Example(implicit addition: Addition, implicit multiplication: Multiplication)
두 작업을 독립적으로 선택하는 것이 좋습니다. 두 가지 선택이 conistent해야하는 경우, 당신이 "자연스럽게"암시 적 범위에 적절한 작업을 얻을 경우에만 마지막으로,이 모든 것이 유용하다 모두 작동
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)
로 한 특성을 가지고 더 적합 할 수 있습니다.
implicit val addition = ...
implicit val multiplication =
new Example
과 같이 예를 만들 때마다 암시 적으로 지정해야 할 수도 있습니다. 전화의 대부분은 같은 값으로 작동 할 것으로 예상하고, 경우
또한, 당신은 단지 그들 중 몇 가지를 변경하려면, 당신은 오히려 기본 값으로 인수 갈 수도
class Example(doSomething1 : (Double, Double) => Double = <default value>, doSomething2 ...)
당신은 할 수 있습니다 이 두 가지 모두 기본값을 갖는 암시적인 인수입니다. 그렇게하면 암시 적이 발견되지 않을 때 기본값이 사용됩니다.