2011-06-18 14 views

Odpowiedz

18

Problem polega na tym, że + jest przeciążone, aby połączyć String z nie-łańcuchami. Tak więc, gdy używasz metody + na typie, który jej nie posiada, otrzymasz komunikat błędu, który nie jest związany z rzeczywistym problemem: Twój typ nie jest tym, którego oczekiwałeś.

Istnieje +: i :+, aby go zastąpić.

20

Rozszerzając odpowiedź Daniela, + jest również bardzo złym operatorem do użycia przy wstawianiu kolekcji. Matematycznie operator + ma bardzo konwencjonalne znaczenie, a część tego znaczenia jest gwarancją asocjatywności. Niestety, asocjatywność jest gwarancją, która nie ma żadnego sensu, kiedy dodajemy Int do Vector[Int]. Jako taki, + był zawsze bardzo mylącym operatorem dla każdego, kto miał jakiekolwiek szkolenie algebraiczne.

+: i :+ są lepsze pod wieloma względami, nie najmniejszym z nich jest to, że nie oczekuje się skojarzeń. W rzeczywistości sama asymetria operatorów implikuje nie--asocjatywność, która jest właśnie ich semantyką. Także +: i :+ bardzo dobrze odzwierciedlają siebie nawzajem, a +: jest skojarzeniami prawymi, z których wszystkie spiskują, aby zapewnić bardzo naturalny interfejs API do zbierania, odpowiednio, przedrostka i dopełnienia.

Powiązane problemy