2012-10-26 16 views
14

Czy mogę używać prymitywów w Scali?Jak używać prymitywów w Scali?

Przypadek zastosowanie jest do przechowywania miliardy wskazówki, aby różnica pomiędzy 4 bajty (na int) oraz 16 bajtów (liczbę całkowitą) jest ważny.

+6

scala kompiluje do prymitywów, gdy może (Array [Int] => int [] itd.) – Arjan

+0

Jeśli masz dosłownie miliardy wskazówki, jesteś prawdopodobnie napotkasz problemów z pamięcią, nawet jeśli używasz prymitywów, plus size tablic jest ograniczona na JVM przez wymaganie int ref elementu, tj. ~ 2bn elems. Pomyśl o streamowaniu danych lub korzystaniu z bazy danych. –

Odpowiedz

14

Jeśli chcesz Scala przechowywać bez opakowania prymitywów, można użyć Array[Int] ale powstrzymania się od stosowania jakichkolwiek chłodne metodę gromadzenia Scala na nim (bo zmusi boks).

Jeśli szukasz niezmiennych kolekcji typów podstawowych, możesz rzucić okiem na Debox, który zapewnia specjalistyczne bufory, zestawy i mapy. Projekt wciąż się rozwija, ale jest bardzo obiecujący.

+0

Nie sądzę, aby wywoływanie kontenerów Debox było niezmienne. Jednak Debox usilnie stara się udostępnić funkcje Scala mutable.Buffer, Map i Set (np. Autogrowing), z dobrą wydajnością, w szczególności bez boksu. –

12

Można użyć @specialised adnotacji pozwolić kompilator tworzenia wyspecjalizowanych instancje klasy dla Ciebie. Zobacz this article.

class Container[@specialized(Int) T](value: T) { 
    def apply(): T = value 
}