¿Por qué las funciones scala están limitadas a 22 parámetros?

No es que realmente me haya acercado a ese límite, pero siempre me he preguntado: ¿Por qué se detienen en Function22 / Tuple22 ? Restricción JVM? ¿Elección arbitraria?

El comstackdor reescribe las funciones y las tuplas como objetos, y solo se definen Function0 través de Function22 y Tuple0 a Tuple22 . Creo que el límite de 22 es completamente arbitrario, pero la razón para tener un límite no es.

Piénselo de esta manera: para ejecutar una aplicación Scala, las clases necesarias para ejecutarlo deben estar presentes. Si el comstackdor creara dinámicamente clases para funciones, entonces esas clases no se incluirían en el archivo JAR de la biblioteca Scala, por lo que tendría que incluirlas en su aplicación. Eso podría funcionar, pero entonces tendrías el problema de cuáles deberían ser los nombres completamente calificados de las clases: si fueran las mismas para todas las aplicaciones, entonces tendrías enfrentamientos ya que las bibliotecas contendrían las mismas clases, y si los nombres no fueran los mismos Igual terminaría con incompatibilidades: las funciones de las bibliotecas no serían las mismas que las funciones en su aplicación.

No hay tal límite. Incluso si las bibliotecas estándar solo definen hasta Function22, puede definir Function23 si lo necesita, hasta el límite de JVM. O puede agrupar argumentos en tuplas. O simplemente puedes dejar de pretender que cualquier función requiere más de un argumento:

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

Las funciones al curry pueden tomar tantos argumentos como desee.

Es principalmente arbitrario, pero hay algunos límites subyacentes en la JVM que dictan aproximadamente cuál debe ser el límite.

El problema principal es la coincidencia de patrones en las clases de casos. Si una clase de caso permitiera ser mucho más grande, el código de coincidencia de patrón generado podría exceder fácilmente el tamaño de método válido máximo. Todo lo demás (Producto, Función, Tuple, …) simplemente sigue el límite de 22 parámetros que, por lo tanto, se eligió para las clases de casos.

Además … Si estás escribiendo funciones / tuplas con> 22 parámetros, entonces probablemente estés atrasado en el rediseño 🙂

Elección arbitraria. Aunque estas clases se generan automáticamente, debe haber un límite en alguna parte.

Tenga en cuenta que puede tener algo así como “tuplas de tamaño arbitrario” mediante HLists o construcciones similares (consulte http://jnordenberg.blogspot.com/2008/08/hlist-in-scala.html )