복붙노트

[SCALA] 유용성 (실제 응용 프로그램에서와 같이) 무두질 v.s.의 스칼라의 부분 적용

SCALA

유용성 (실제 응용 프로그램에서와 같이) 무두질 v.s.의 스칼라의 부분 적용

나는 스칼라에서 일부 응용 프로그램을 통해 무두질의 장점을 이해하기 위해 노력하고있어. 다음 코드를 고려하십시오 :

  def sum(f: Int => Int) = (a: Int, b: Int) => f(a) + f(b)

  def sum2(f: Int => Int, a: Int, b: Int): Int = f(a) + f(b)

  def sum3(f: Int => Int)(a: Int, b: Int): Int = f(a) + f(b)

  val ho = sum({identity})
  val partial = sum2({ identity }, _, _)
  val currying = sum3({ identity })

  val a = currying(2, 2)
  val b = partial(2, 2)
  val c = ho(2, 2)

내가 부분적으로 쉽게 기능을 적용 계산할 수 있습니다 경우에 따라서, 무두질의 장점은 무엇입니까?

해결법

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

    1.두번째 매개 변수 부는 이름 파라미터에 의해 함수 나 커링 경우 주로 사용된다. 이 두 가지 이점이있다. 첫째, 함수 인수는 괄호로 묶인 코드 블럭처럼 보일 수 있습니다. 예를 들면

    두번째 매개 변수 부는 이름 파라미터에 의해 함수 나 커링 경우 주로 사용된다. 이 두 가지 이점이있다. 첫째, 함수 인수는 괄호로 묶인 코드 블럭처럼 보일 수 있습니다. 예를 들면

    using(new File(name)) { f =>
      ...
    }
    

    이것은 uncurried 대안보다 더 읽습니다

    using(new File(name), f => {
      ...
    })
    

    둘째, 더 중요한 것은, 형식 유추는 일반적으로 함수의 매개 변수 유형을 알아낼 수 있으므로 호출 사이트에서 제공 할 필요가 없습니다. 예를 들어, 나는이 같은 목록을 통해 최대 함수를 정의하는 경우 :

    def max[T](xs: List[T])(compare: (T, T) => Boolean)
    

    나는 이런 식으로 호출 할 수 있습니다 :

    max(List(1, -3, 43, 0)) ((x, y) => x < y)
    

    심지어 짧은은 :

    max(List(1, -3, 43, 0)) (_ < _)
    

    내가 uncurried 기능으로 최대 정의한 경우, 이것은 내가 같이 호출해야 할 것, 작동하지 않을 것입니다 :

    max(List(1, -3, 43, 0), (x: Int, y: Int) => x < y)
    

    마지막 매개 변수는 함수 나에 의해 이름 매개 변수가 아닌 경우, 나는 무두질 조언하지 않을 것입니다. 스칼라의 _ notatation 더 유연 amost 경량 및 IMO 명확하다.

  2. ==============================

    2.나는 당신이 당신의 카레 예를 반전 경우는 명확하게 생각한다 :

    나는 당신이 당신의 카레 예를 반전 경우는 명확하게 생각한다 :

    def sum4(a: Int, b: Int)(f: Int => Int): Int = f(a) + f(b)
    
    val d = sum4(2, 2) { x =>
      x * x
    }
    

    그것은 광학 효과의 더 있지만 전체 표현식 주위에있는 괄호를 사용할 필요가 없습니다. 물론 일부 응용 프로그램을 사용하여 동일한 결과를 얻을 또는 확인, 인수를 반전 도우미 메서드를 만들어 수 있습니다. 요점은 당신이 처음부터 커리 방법으로 시작하면이 모든 것을 할 필요가 없다는 점이다. 그런 의미 태닝의 API 및 구문 설탕 일의 더 많은 것이다. 당신이 사용하는 것이 예상되지 않는다

    val partial_sum4 = sum4(2, 2)
    

    어디서든 코드 또는이 할 특히 의미있는 방법입니다. 그것은 당신이 쉽게 잘 찾고 표현을 얻으 것입니다.

    (음, 추론을 입력에 대한 몇 가지 장점이 ...있다)

  3. from https://stackoverflow.com/questions/8063325/usefulness-as-in-practical-applications-of-currying-v-s-partial-application-i by cc-by-sa and MIT license