복붙노트

[SCALA] 왜 스칼라 함수는 22 개 매개 변수로 제한된다?

SCALA

왜 스칼라 함수는 22 개 매개 변수로 제한된다?

아니 실제로했습니다 그 한계에 가까운 올하지만 필자가 항상 궁금 것을 : 할 왜 Function22 / Tuple22에서 중지합니다. JVM 제한? 임의 선택?

해결법

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

    1.기능 및 튜플은 컴파일러에 의해 개체로 다시 작성하고, 단지 Function0 Function22 및 Tuple0 통해 Tuple22을 통해 정의됩니다. 나는 22의 제한이 완전히 임의의 생각하지만 한계를 가지는 이유는 없습니다.

    기능 및 튜플은 컴파일러에 의해 개체로 다시 작성하고, 단지 Function0 Function22 및 Tuple0 통해 Tuple22을 통해 정의됩니다. 나는 22의 제한이 완전히 임의의 생각하지만 한계를 가지는 이유는 없습니다.

    이렇게 생각 스칼라 응용 프로그램에게이 있어야 실행하는 데 필요한 클래스를 실행합니다. 컴파일러는 동적으로 다음 해당 클래스가 스칼라 라이브러리 JAR에 포함되지 않을 것 기능을위한 클래스를 생성, 그렇게한다면 당신은 당신의 응용 프로그램에 포함해야합니다. 이름이 아닙니다 인 경우에 그들은 라이브러리에서 동일한 클래스를 포함하는 것이기 때문에 다음 충돌이있는 모든 응용 프로그램에 대해 동일한한다면, 그리고 : 그 일을 할 수 있지만, 당신은 클래스 '완전한 이름은해야하는지의 문제가있는 것 앱에서 기능과 동일하지 않을 것입니다 라이브러리의 기능 - 동일 당신은 호환성 문제로 끝날 것입니다.

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

    2.그러한 제한이 없습니다. 표준 라이브러리는 Function22를 정의 할 경우에도 당신은 JVM의 한계까지, 필요하면, 당신은 Function23을 정의 할 수 있습니다. 또는 당신은 튜플로 그룹 인수 할 수 있습니다. 또는 당신은 모든 기능이 하나 개 이상의 인수를 취하는 척 막을 수 :

    그러한 제한이 없습니다. 표준 라이브러리는 Function22를 정의 할 경우에도 당신은 JVM의 한계까지, 필요하면, 당신은 Function23을 정의 할 수 있습니다. 또는 당신은 튜플로 그룹 인수 할 수 있습니다. 또는 당신은 모든 기능이 하나 개 이상의 인수를 취하는 척 막을 수 :

    a => b => c => d => e => ...
    

    당신이 원하는대로 카레 기능은 스택 크기의 한계까지, 많은 인수를 취할 수 있습니다.

  3. ==============================

    3.그것은 주로 임의의, 그러나 제한 할 필요가 대략 어떤 지시는 JVM에 대한 몇 가지 근본적인 한계가있다.

    그것은 주로 임의의, 그러나 제한 할 필요가 대략 어떤 지시는 JVM에 대한 몇 가지 근본적인 한계가있다.

    주요 문제는 케이스 클래스에 대한 패턴 매칭이다. 이 경우 클래스는 생성 된 패턴 매치 코드가 쉽게 최대 유효한 방법 크기를 초과 할 수 후 훨씬 더 큰 것으로 허용합니다. 다른 모든 (제품, 기능, 튜플, ...) 다만, 따라서 경우 클래스에 대한 선정 된 22 매개 변수 제한을 따른다.

    당신이 다음> 22 개 매개 변수 기능 / 튜플을 작성하는 경우도 ... 당신은 재 설계를위한 아마 연체있어 :)

  4. ==============================

    4.임의 선택. 이러한 클래스가 자동으로 생성되어 있지만, 어딘가 제한이 있어야합니다.

    임의 선택. 이러한 클래스가 자동으로 생성되어 있지만, 어딘가 제한이 있어야합니다.

    당신이 HLists 또는 유사한 구조를 사용하여 "임의의 크기의 튜플"같은 것을 가질 수 있습니다 (http://jnordenberg.blogspot.com/2008/08/hlist-in-scala.html 참조)

  5. from https://stackoverflow.com/questions/4152223/why-are-scala-functions-limited-to-22-parameters by cc-by-sa and MIT license