2016-05-13 14 views
5

Zgodnie z dokumentacją na temat klas wartości, mogą zostać przydzielone w ramach szeregu okoliczności:Scala Zakazać alokacji klas wartości

Allocation Podsumowanie

klasa jest traktowana jako wartość innego typu.

klasa wartości jest przypisana do tablicy.

wykonanie testów typu środowiska wykonawczego, takich jak dopasowywanie wzorców.

Czy mimo to należy zgłosić błąd kompilacji, jeśli zaistnieją takie okoliczności?

+2

Czy możesz bardziej szczegółowo wyjaśnić, dlaczego chcesz to zrobić? –

+2

Cała motywacja klas wartości jest taka, że ​​znikają w czasie wykonywania. Brak alokacji pamięci, ale jeśli nie mogę tego kontrolować, motywacja mija. (Tworzę bezpieczne podejście Json typu bez konieczności właściwego zawijania każdego typu wartości w typie Json, np. Argonaut) –

+0

Po co więc kompilować ostrzeżenia czasu? Wiesz dokładnie, kiedy dokonujesz przydziału. –

Odpowiedz

1

Nie ma nic wbudowanego (AFAIK).

Można napisać wtyczkę SBT, która sprawdza pliki .class po zakończeniu zadania compile (przy użyciu biblioteki takiej jak BCEL, ASM itp.) I kończy się niepowodzeniem, jeśli znajdzie jakiekolwiek wywołania konstruktora klasy wartości.

Alternatywnie, powinieneś być w stanie zrobić to samo z compiler plugin (niestety dokumentacja, którą udało mi się znaleźć, jest dość stara) z nieco większym trudem.

+0

Może być możliwe sprawdzenie kompilatora posterunków w stanie wynikowym elimErasedValueType. Być może sprawdź adnotację na klasie wartości? –

+0

Faktycznie, bardziej prawdopodobne wcześniej, w polu TypeAdaptingTransformer, metoda pola –