Ačkoli se to na první pohled nemusí zdát, Scala je rozhodně staticky typovaným jazykem. Používá totiž type inference (odvození typu), které na první pohled vypadá jako dynamické typování, ale ve skutečnosti se v době kompilace zjišťuje datový typ. Jednoduchý příklad:
var foo = „Hello“; // Že jde o String lze odvodit
Nevím, jak přesně dopadne toto:
var foo = „Hello“;
foo = 5;
Dost možná v takovém případě bude foo typu Object (nejbližší společný typ obou typů) a nepůjde na něm volat substr apod.
Následující kód zcela jistě selže při kompilaci:
var foo = „Hello“; // do Foo musí jít přiřadit String
foo.length(); // na Foo musí jít zavolat java.lang.String.length()
foo = 5; // do foo musí jít přiřadit int, Integer, float nebo něco takového
Nevím, jak to přesně dopadne ve Scale, ale silně pochybuji, že by Scala takový kód zkompilovala, protože je typovaná staticky.
O statickém typování Scaly vypovídá ostatně již to, že u parametrů a v případě rekurze i návratového typu je nutné uvést datový typ, jinak by se totiž blbě inferovalo před vlastním spuštěním.
Vím, že článek je to již starší, já se k němu bohužel dostal až teď. Snad to autor opraví.