Usa StringLike invece di String in Scala?

6

Scala ha il tratto StringLike. Diciamo che voglio creare una classe di casi Name e internamente dovrebbe salvare il nome con alcuni caratteri. Dovrei usare case class Name(name: StringLike) o case class Name(name: String) ?

Il primo è ovviamente più astratto. Significa che qualcuno può darmi CustomString che estende StringLike e potrebbe sovrascrivere alcuni metodi.

Se voglio essere sicuro che l'argomento dato si comporti come la classe String che conosco, dovrei usare String e altro StringLike . È corretto? Ci sono casi in cui farebbe praticamente la differenza?

Inoltre, ci sono cose che posso fare con il String più specializzato che non posso fare con un StringLike ?

    
posta valenterry 18.06.2015 - 17:02
fonte

1 risposta

8

Sebbene di solito sia buona norma accettare come argomenti astratti il più possibile, in Scala generalmente si vuole evitare di utilizzare direttamente qualsiasi tipo con parametri [Repr] . Sono per lo più lì per la comodità degli implementatori di librerie standard.

Questo è particolarmente vero per StringLike , che è principalmente inteso ad aumentare un String di Java per essere in grado di agire anche come una raccolta di caratteri. Non dovresti guardare l'uomo dietro la tenda per vedere come è fatto. Né è previsto che qualcuno possa mai realizzare un'implementazione personalizzata di StringLike .

String è anche molto meglio da un semplice punto di vista della leggibilità. Se hai bisogno di qualcosa che si comporta come String , usa solo String . Nella remota eventualità che tu abbia mai bisogno di qualcosa di simile a String , ma non proprio, puoi apportare la modifica e potrebbe esserci una soluzione migliore.

    
risposta data 18.06.2015 - 20:34
fonte

Leggi altre domande sui tag