![]() |
1
29
函数和元组被编译器重写为对象,并且
这样想:要运行scala应用程序,必须存在运行它所需的类。如果编译器动态地为函数创建类,那么这些类将不会包含在scala库jar中,因此您必须将它们包含在应用程序中。这样做是可行的,但是你会有一个问题,那就是类的完全限定名应该是什么:如果所有应用程序的完全限定名都是相同的,那么你会有冲突,因为库中会包含相同的类,如果名称不相同,那么最终会导致不兼容——很有趣。库中的操作与应用程序中的函数不同。 |
![]() |
2
26
没有这样的限制。即使标准库最多只能定义函数22,如果需要,也可以定义函数23,直到达到JVM限制。或者可以将参数分组为元组。或者您可以停止假装任何函数接受多个参数:
curried函数可以接受任意多的参数,最多可以接受堆栈大小的限制。 |
![]() |
3
11
大部分都是武断的,但是 是 对JVM的一些基本限制大致规定了限制需要是什么。 主要问题是案例类上的模式匹配。如果case类允许大得多,则生成的模式匹配代码很容易超过最大有效方法大小。其他一切(产品、函数、元组等)都遵循22个参数限制,因此这些参数限制是为case类选择的。 也。。。如果您正在编写带有>22个参数的函数/元组,那么您可能需要重新设计:) |
![]() |
4
4
任意选择。即使这些类是自动生成的,但在某些地方也必须有限制。 注意,通过使用hlist或类似的结构,您可以拥有类似“任意大小的元组”(请参见 http://jnordenberg.blogspot.com/2008/08/hlist-in-scala.html ) |