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
<ahref="{{ site.baseurl }}/resources/images/tour/unified-types-diagram.svg"><imgstyle="width:100%"src="{{ site.baseurl }}/resources/images/tour/unified-types-diagram.svg"alt="Scala Type Hierarchy"></a>
15
15
16
-
## Иерархия типов Scala ##
16
+
## Иерархия типов Scala
17
17
18
18
[`Any`](https://www.scala-lang.org/api/2.12.1/scala/Any.html) это супертип всех типов, также называемый верхним типом. Он определяет несколько универсальных методов, таких как `equals`, `hashCode` и `toString`. У `Any` есть два прямых подкласса: `AnyVal` и `AnyRef`.
Вот пример, демонстрирующий, что строки, целые числа, символы, логические значения и функции являются объектами, как и любой другой объект:
25
25
26
+
{% tabs unified-types-1 %}
27
+
{% tab 'Scala 2 и 3' for=unified-types-1 %}
28
+
26
29
```scala mdoc
27
30
vallist:List[Any] =List(
28
31
"a string",
@@ -35,6 +38,9 @@ val list: List[Any] = List(
35
38
list.foreach(element => println(element))
36
39
```
37
40
41
+
{% endtab %}
42
+
{% endtabs %}
43
+
38
44
Объявляем переменную `list` типа `List[Any]`. Список инициализируется элементами различных типов, но все они являются экземпляром `scala.Any`, так что вы можете добавить их в список.
39
45
40
46
Ниже приведен вывод программы:
@@ -48,11 +54,15 @@ true
48
54
```
49
55
50
56
## Приведение типа
57
+
51
58
Числовые типы могут быть приведены следующим образом:
52
59
<ahref="{{ site.baseurl }}/resources/images/tour/type-casting-diagram.svg"><imgstyle="width:100%"src="{{ site.baseurl }}/resources/images/tour/type-casting-diagram.svg"alt="Scala Type Hierarchy"></a>
53
60
54
61
Например:
55
62
63
+
{% tabs unified-types-2 %}
64
+
{% tab 'Scala 2 и 3' for=unified-types-2 %}
65
+
56
66
```scala mdoc
57
67
valx:Long=987654321
58
68
valy:Float= x.toFloat // 9.8765434E8 (заметьте, что некоторая точность теряется в этом случае.)
@@ -61,17 +71,27 @@ val face: Char = '☺'
61
71
valnumber:Int= face // 9786
62
72
```
63
73
74
+
{% endtab %}
75
+
{% endtabs %}
76
+
64
77
Приведение типа - однонаправленно. Следующий пример не скомпилируется:
65
78
79
+
{% tabs unified-types-3 %}
80
+
{% tab 'Scala 2 и 3' for=unified-types-3 %}
81
+
66
82
```
67
83
val x: Long = 987654321
68
84
val y: Float = x.toFloat // 9.8765434E8
69
85
val z: Long = y // обратно не подходит
70
86
```
71
87
88
+
{% endtab %}
89
+
{% endtabs %}
90
+
72
91
Вы также можете приводить к своему подтипу. Об этом мы поговорим позже в ходе нашего обзора.
73
92
74
93
## Nothing и Null
75
-
`Nothing` является подтипом всех типов, также называемым нижним типом. Нет значения, которое имеет тип `Nothing`. Обычно он используется чтоб дать сигнал о не вычислимости, например брошено исключение, выход из программы, бесконечное зацикливание (т.е. это тип выражения, которое не вычисляется).
94
+
95
+
`Nothing` является подтипом всех типов, также называемым нижним типом. Нет значения, которое имеет тип `Nothing`. Обычно он используется чтоб дать сигнал о не вычислимости, например брошено исключение, выход из программы, бесконечное зацикливание (т.е. это тип выражения, которое не вычисляется).
76
96
77
97
`Null` подтип всех ссылочных типов (т.е. любой подтип AnyRef). Он имеет одно значение, определяемое ключевым словом литерала `null`. `Null` предоставляется в основном для функциональной совместимости с другими языками JVM и почти никогда не должен использоваться в коде Scala. Об альтернативах `null` мы поговорим позднее.
0 commit comments