Дженерики Scala по сравнению с C#

В OpenSSL 1.0.1e все, что мне нужно сделать, это:

CC=~/android-ndk-r9/toolchains/arm-linux-androideabi-4.8/prebuilt/darwin-x86_64/bin/arm-linux-androideabi-gcc ./Configure android-armv7
ANDROID_DEV=~/android-ndk-r9//platforms/android-8/arch-arm/usr make build_libs
8
задан om-nom-nom 8 April 2012 в 23:13
поделиться

3 ответа

Я знаю, что ответ Джона Скита был принят, но он не совсем правильный. Ограничения накладывает не столько JVM, сколько язык Java. Целью разработки Scala является максимально простой вызов из Java, а в Java нет концепции перегрузки имени класса на основе арности параметра типа. Например, простой способ реализовать перегрузку на основе параметров типа в JVM - это изменить имя. Однако такое искажение имени должно быть видимым для Java и было бы некрасиво. В вашем примере гипотетический Scala может компилировать два класса, Foo_ $ 1 и Foo_ $ 2. Scala может сделать это искажение невидимым. Однако программист на Java увидел бы все это безобразие.

24
ответ дан 5 December 2019 в 05:34
поделиться

Отчасти это может быть связано с аналогичными ограничениями Java. Насколько я понимаю, Scala в основном используется на JVM, где вы не можете перегрузить универсальные типы по арности.

Похоже, Scala также использует стирание типов для своих универсальных типов. , даже в порте .NET. (В той же статье упоминается, что в Scala были дженерики задолго до того, как это стало на самом деле в Java, поэтому даже если Java и поддерживала это, нет никакой гарантии, что Scala будет - они были несколько ограничены, когда впервые разработали эту функцию.)

]
4
ответ дан 5 December 2019 в 05:34
поделиться

Я полагаю, это сделано для упрощения сопоставления с Java, имеющей такое же ограничение.

Можно было бы немного изменить имя, но ценой обеспечения взаимодействия с Java труднее. На мой взгляд, они приняли правильное решение.

2
ответ дан 5 December 2019 в 05:34
поделиться
Другие вопросы по тегам:

Похожие вопросы: