2016-05-13 14 views
5

Secondo la documentazione sul Classi di valore, essi possono essere assegnati una serie di circostanze:Scala Proibire assegnazione delle classi di valore

Allocation Sommario

una classe valore viene considerato come un altro tipo.

una classe di valori viene assegnata a un array.

esecuzione di test sul tipo di runtime, ad esempio la corrispondenza del modello.

C'è comunque da dire, genera un errore di compilazione se si verificano queste circostanze?

+2

Puoi approfondire l'argomento * perché * vuoi farlo? –

+2

L'intera motivazione dietro le classi di valore è che scompaiono in fase di esecuzione. Nessuna allocazione di memoria, ma se non posso controllarlo, la motivazione va via. (Sto creando un approccio JSON di tipo sicuro senza dover effettivamente racchiudere ogni tipo di valore in un tipo Json, come ad esempio fa l'argonauta) –

+0

Perché hai bisogno di avvertenze sulla compilazione del tempo? Sai esattamente quando stai facendo un'allocazione. –

risposta

1

Non c'è niente di integrato (AFAIK).

È possibile scrivere un plug-in SBT che ispeziona i file .class dopo le attività compile (utilizzando una libreria come BCEL, ASM, ecc.) E non riesce se trova chiamate di costruttore di classe value.

In alternativa, si dovrebbe essere in grado di fare lo stesso con uno compiler plugin (purtroppo, la documentazione che sono riuscito a trovare è piuttosto vecchio) con un po 'più di difficoltà.

+0

Potrebbe essere possibile controllare nello stadio del compilatore posterasure lo stato risultante di elimErasedValueType. Forse controlla un'annotazione sulla classe di valore? –

+0

In realtà, più probabilmente in precedenza, nel TypeAdaptingTransformer, metodo box –

Problemi correlati