Почему такой язык, как Scala, с очень сильной системой статического типа, допускает следующие конструкции:
scala> List(1, List(1,2))
res0: List[Any] = List(1, List(1, 2))
То же самое работает, если вы замените List
на Array
. Я изучил функциональное программирование в OCaml, которое отклоняло бы тот же код во время компиляции:
# [1; [1;2]; 3];;
Characters 4-9:
[1; [1;2]; 3];;
^^^^^
Error: This expression has type 'a list
but an expression was expected of type int
Итак, почему Scala позволяет компилировать?