복붙노트

[SCALA] 어떻게 여러 개의 입력과 implicits는 스칼라에서 사용할 수 있습니까?

SCALA

어떻게 여러 개의 입력과 implicits는 스칼라에서 사용할 수 있습니까?

예를 들어, 내가 어떻게 다음은 암시 적으로 적용되는 표현을 쓸 수 있습니다 :

implicit def intsToString(x: Int, y: Int) = "test"

val s: String = ... //?

감사

해결법

  1. ==============================

    1.하나 개의 인수의 암시 적 기능이 자동으로 예상되는 유형으로 값을 변환하는 데 사용됩니다. 이러한 암시보기로 알려져 있습니다. 두 개의 인수, 그것은 일을하거나 화장의 의미하지 않습니다.

    하나 개의 인수의 암시 적 기능이 자동으로 예상되는 유형으로 값을 변환하는 데 사용됩니다. 이러한 암시보기로 알려져 있습니다. 두 개의 인수, 그것은 일을하거나 화장의 의미하지 않습니다.

    당신은 TupleN에 암시 적 관점을 적용 할 수 있습니다 :

    implicit def intsToString( xy: (Int, Int)) = "test"
    val s: String = (1, 2)
    

    또한 암시와 같은 함수의 마지막 매개 변수 목록을 표시 할 수 있습니다.

    def intsToString(implicit x: Int, y: Int) = "test"
    implicit val i = 0
    val s: String = intsToString
    

    또는 암시의 두 가지 용도를 결합 :

    implicit def intsToString(implicit x: Int, y: Int) = "test"
    implicit val i = 0
    val s: String = implicitly[String]
    

    그러나이 경우 정말 유용하지 않습니다.

    최신 정보

    마틴의 의견에 자세히 설명하기 위해이 가능합니다.

    implicit def foo(a: Int, b: Int) = 0
    // ETA expansion results in:
    // implicit val fooFunction: (Int, Int) => Int = (a, b) => foo(a, b)
    
    implicitly[(Int, Int) => Int]
    
  2. ==============================

    2.하나의 매우 중요한 경우 밖으로 제이슨의 대답 미스 : 모든하지만 첫 번째 암시되어 여러 인수 ...이 두 개의 매개 변수 목록을 필요로 암시 적 기능,하지만 문제는 표현 된 방법을 지정된 범위 밖으로 될 것 같지 않습니다.

    하나의 매우 중요한 경우 밖으로 제이슨의 대답 미스 : 모든하지만 첫 번째 암시되어 여러 인수 ...이 두 개의 매개 변수 목록을 필요로 암시 적 기능,하지만 문제는 표현 된 방법을 지정된 범위 밖으로 될 것 같지 않습니다.

    여기에 두 개의 인수를 암시 적 변환의 예입니다,

    case class Foo(s : String)
    case class Bar(i : Int)
    
    implicit val defaultBar = Bar(23)
    
    implicit def fooIsInt(f : Foo)(implicit b : Bar) = f.s.length+b.i
    

    샘플 REPL 세션,

    scala> case class Foo(s : String)
    defined class Foo
    
    scala> case class Bar(i : Int)
    defined class Bar
    
    scala> implicit val defaultBar = Bar(23)
    defaultBar: Bar = Bar(23)
    
    scala> implicit def fooIsInt(f : Foo)(implicit b : Bar) = f.s.length+b.i
    fooIsInt: (f: Foo)(implicit b: Bar)Int
    
    scala> val i : Int = Foo("wibble")
    i: Int = 29
    
  3. from https://stackoverflow.com/questions/2416733/how-can-implicits-with-multiple-inputs-be-used-in-scala by cc-by-sa and MIT license