Zauważyłem, że Addable
jest przestarzałe, a Subtractable
nie jest. Co jest nie tak z Addable
i dlaczego różni się Subtractable
?Dlaczego dodatek Scala jest przestarzały?
Odpowiedz
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ć.
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.
- 1. Dlaczego WebView LayoutAlgorithm.SINGLE_COLUMN jest przestarzały?
- 2. Dlaczego produkt/Wp64 jest przestarzały?
- 3. Dlaczego plik JButton.enable jest przestarzały?
- 4. Dlaczego std :: iterator jest przestarzały?
- 5. Dlaczego kontroler jest przestarzały w AngularDart 0.10.0?
- 6. Dlaczego tag HTML xmp jest przestarzały?
- 7. Dlaczego program InsertHelper był przestarzały?
- 8. Dlaczego styl mutacji był przestarzały?
- 9. Dlaczego Date.getTimezoneOffset przestał być przestarzały?
- 10. java.util.Timer: Czy jest przestarzały?
- 11. Czy MSMQ jest przestarzały?
- 12. Czy LDAP jest przestarzały?
- 13. Newtonsoft.Json.Schema.JsonSchema jest przestarzały?
- 14. Dlaczego słoik hibernacji-java8 (hibernacja 5.x) jest przestarzały?
- 15. Fluent NHibernate ŁączonySubClass jest przestarzały
- 16. Opis api annotaion jest przestarzały.
- 17. Dlaczego orig_eax jest dostarczany jako dodatek do eax?
- 18. Dlaczego ten kod Scala jest wolny?
- 19. Nulls in Scala ... dlaczego jest to możliwe?
- 20. initWithContentsOfFile Przestarzały
- 21. Argument context_instance dla render_to_string jest przestarzały.
- 22. Czy wzór DTO jest przestarzały, czy nie?
- 23. Dlaczego Scala Map jest automatycznie importowana, ale HashMap nie jest?
- 24. Konstruktor Uri z dontEscape jest przestarzały, co to jest alternatieve?
- 25. Dodatek FormData nie działa
- 26. iOS6 viewDidUnload Przestarzały
- 27. viewpager setonpagechangelistener przestarzały
- 28. Android PowerManager WakeLock - przestarzały
- 29. FacebookSdk.sdkInitialize (getApplicationContext()) Przestarzały
- 30. Dlaczego Scala nie ma decltype?
To pytanie i jego odpowiedzi sprawia, że czuję się jakbym wszedł do prywatnego klubu Daniels. –