Se hard-code il tipo, come PartialFunction[Any,Nothing]
, non è possibile restringere la funzione di prendere un parametro più specifico di Any
.
Utilizzando un parametro di tipo generico, è possibile ritrovarsi con una soluzione più flessibile che soddisfa tutti i casi e soprattutto rende sicura la funzione.
Supponiamo che tu desideri una funzione che desideri prendere un Animal
come parametro e restituire un Integer
.
Supponiamo che la funzione è dichiarata come essere:
def myFunction: PartialFunction[Any,Nothing]
In primo luogo, funzione parziale non sarebbe specializzato per Animal
al fianco dei parametri, ma a Any
. Che dire se passo uno Human
come parametro ...., passerebbe .. E riguardo la sicurezza?
In secondo luogo, se questa funzione viene dichiarata come restituita Nothing
, non è possibile restituire alcun valore ma Nothing
! Infatti, Nothing
sottoclasse tutte le classi in Scala. Ciò porta alla regola nota che il parametro type restituito deve sempre essere covariante per rendere una funzione interessante, non il caso con Nothing
.
In effetti, Nothing
è interessante solo quando si tratta del metodo empty
di PartialFunction
. Logica dal momento che un vuoto PartialFunction
non implica nulla da restituire e dovrebbe essere costretto a farlo :)
Si potrebbe chiedere: "Allora perché non cambiamo il tipo di ritorno a Any
?" Risposta: Perché si perderebbe tutto il vantaggio del tempo di cancellazione generica facendo compilatore per aggiungere automaticamente i cast necessari => Non si recupera direttamente il valore intero, ma Any. Fastidioso ..
Penso che dovresti aggiornare la tua domanda per includere il motivo per cui è importante. – nilskp
@nilskp Sono curioso del design delle librerie. In particolare, quando creo il mio codice, dovrei usare le varianti polimorfiche o quelle con "Any/Nothing"? –