You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Через проблему [стирання типів][erasure], файли _.class_ містять неповне представлення про ваш код.
69
69
Простий спосіб продемонструвати це приклад з `List`.
70
70
71
-
_Стирання типів_ означає, що коли ви пишете наступний код Scala, він повинен працювати на JVM:
71
+
_Стирання типів_ означає, що коли ви пишете наступний код Scala:
72
72
73
73
```scala
74
74
valxs:List[Int] =List(1, 2, 3)
75
75
```
76
76
77
-
цей код компілюється у файл _.class_, який має бути сумісним із JVM. Результатом цієї вимоги сумісності код всередині цього файлу класу --- який ви можете побачити за допомогою команди `javap`--- виглядає так:
77
+
цей код компілюється у файл _.class_, який має бути сумісним із JVM. Результатом цієї вимоги сумісності код всередині цього файлу класу — який ви можете побачити за допомогою команди `javap`— виглядає так:
@@ -95,7 +95,7 @@ int x = (Int) xs.get(0) // Java-подібно
95
95
val x = xs.get(0).asInstanceOf[Int] // більш Scala-подібно
96
96
```
97
97
98
-
Знову ж таки, це зроблено для сумісності, щоб ваш код Scala міг працювати на JVMю
98
+
Знову ж таки, це зроблено для сумісності, щоб ваш код Scala міг працювати на JVM.
99
99
Однак, інформація про те, що ми вже мали список цілих чисел, втрачається у файлах класу.
100
100
Це створює проблеми під час спроби збірки Scala програми з уже скомпільованою бібліотекою.
101
101
Для цього нам потрібно більше інформації, ніж зазвичай міститься у файлах класу.
@@ -115,7 +115,7 @@ val x = xs.get(0).asInstanceOf[Int] // більш Scala-подібно
115
115
116
116
- Під **час компіляції**, `scalac` читає та аналізує ваш код, він знає, що `xs` є `List[Int]`
117
117
- Коли компілятор записує ваш код у файл класу, він записує `xs` як `List[Object]`, та додає інформацію про перетворення усюди, де йде звернення до `xs`
118
-
- Потім під **час виконання**--- коли ваш код працює в JVM --- JVM не знає, що ваш список є `List[Int]`
118
+
- Потім під **час виконання**— коли ваш код працює в JVM — JVM не знає, що ваш список є `List[Int]`
119
119
120
120
Зі Scala 3 та Tasty, є ще одна важлива примітка про час компіляції:
0 commit comments