我只是想知道Scala泛型的实现细节.在C#中,可以将类声明为:
class Foo<T1>{}
class Foo<T1, T2>{}
Run Code Online (Sandbox Code Playgroud)
但是在Scala中,同样的事情必须被声明为
class Foo0[T1]{}
class Foo1[T1, T2]{}
Run Code Online (Sandbox Code Playgroud)
注意如何为多个通用参数强制更改类名.有没有理由说Scala决定走这条路而不是我感觉更优雅的C#?我知道这可能是一个非常小的挑剔,但我对这个推理很好奇.
Jam*_*Iry 24
我知道Jon Skeet的答案已被接受,但这不太对.并不是JVM强制限制,因为它是Java语言.Scala的设计目标是尽可能轻松地从Java调用,而Java没有基于类型参数arity重载类名的概念.例如,基于JVM上的类型参数实现重载的简单方法是使用名称重整.但是,Java必须能够看到这个名称,并且会很难看.在您的示例中,假设的Scala可能会编译两个类,Foo_ $ 1和Foo_ $ 2.Scala可能会使那个镶边不可见.但是,Java程序员会看到所有这些丑陋.