Moim zdaniem jedną z największych zalet Scali jest jej interoperacyjność z Javą i jej podobna składnia. Jedną z rzeczy, które uznałem za dziwne, jest użycie _
operatora do importowania pakietów wilcard zamiast *
operatora używanego w Javie.
Czy istnieje techniczny powód, aby używać _
zamiast *
? Jeśli nie, to dlaczego dokonano tej zmiany?
Odpowiedzi:
W Scali
*
jest to poprawny identyfikator. Można napisać:W wyniku czego:
Można napisać klasę o
*
takiej nazwie :Tak jest w tym przypadku, gdy mam klasę
*
w pakiecieus.hexcoder
i piszę:Powiedziałbyś, że chcesz zaimportować klasę o nazwie
*
. Z tego powodu Scala musiał użyć innego symbolu, aby wskazać import znaku wieloznacznego. Z jakiegokolwiek powodu postanowili użyć_
jako symbolu wieloznacznego.źródło
*
musiał zostać uwzględniony przy mnożeniu. Tak więc inna, mniej popularna postać musiała zostać wybrana jako postać zarezerwowana.W językach funkcjonalnych znak _ jest powszechnie używany do powiedzenia „nie dbam o ten parametr” lub „wszystko może się tu udać”. Rozszerzenie tej wartości na import przestrzeni nazw ma sens.
źródło
Oprócz odpowiedzi Glenna,
import
jest to prawidłowe oświadczenie w dowolnym miejscu w Scali i możnaimport
objąć zakresem obiekt lub instancję. Ponieważ*
jest on oczywiście członkiem wielu klas, nie można go używać jako symbolu wieloznacznego dlaimport
instrukcji. W rezultacie otrzymujesz ciąg znaków, który nie może być prawidłowym identyfikatorem._
przychodzi na myśl. Fakt, że jest on używany w innych miejscach dla innego znaczenia (typ egzystencjalny, funkcja jako instancja) również wynika z tego samego problemu.źródło
W Scali są dziesiątki miejsc, w których stosuje się podkreślenie. Używanie go do importowania symboli wieloznacznych jest tylko logiczną konsekwencją.
źródło