Ad esempio, List[T] forSome { type T }
equivale a List[_]
, ma è vero per ogni possibile utilizzo di forSome
o ci sono casi in cui forSome
non può essere sostituito da un equivalente della seconda sintassi?Tutti gli usi di `forSome 'possono essere sostituiti da un uso equivalente di` _`?
risposta
No, non tutti gli usi possono essere convertiti. Qualcosa di simile a questo (grazie a retronym, qui di seguito, che dovrebbero essere sempre le upvotes su questo)
def foo(xs: Map[T, T] forSome { type T})
Il punto qui è che posso usare il esistenziale in più di un luogo, ma è lo stesso esistenziale. Ovviamente, se si utilizzavano caratteri jolly, si farebbe riferimento a diversi valori esistenziali
_
in questo contesto è la "Sintassi segnaposto per tipi esistenziali", descritta in 3.2.10 dello language specification.
Il nome suona molto simile a un altro uso di _
, "Sintassi segnaposto per funzioni anonime". Questa stenografia non può essere utilizzata per tutte le funzioni. Ad esempio:
(a: A) => f(g(a))
f(g(_: A)) // WRONG, this means f((a: A) => g(a))
possiamo costruire un esempio simile per esistenziali, che non può essere rappresentato _
:
F[G[A]] forSome { type A }
F[G[_]] // WRONG, this means F[G[A] forSome { type A }]
nota laterale: esistenziali sono non livello di tipo analogico di funzioni di livello valore . Che sarebbe:
({type l[A] = F[G[A]])#l
in realtà è un peccato che Scala usa la sottolineatura per esistenziali, invece di funzioni di livello tipo.
UPDATE
Fatemi telaio @oxbow_lakes 'risposta nello stesso modo:
(a: A) => h(a, a)
h(_, _) // WRONG, this means (a, b) => f(a, b)
H[A, A] forSome { type A }
H[_, _] // WRONG, this means H[A, B] forSome { type A; type B }
Qual è la differenza tra F [G [A]] per Alcuni {tipo A} e F [G [A] per Alcuni {tipo A}]? – user482745
- 1. Esempio reale di "Tutti gli usi di` forSome 'possono essere sostituiti da un uso equivalente di `_`?"
- 2. Trova tutti gli usi di metodo toString()
- 3. Tutti gli eventi on/off di Backbone devono essere sostituiti con listenTo/stopListening?
- 4. Trova tutti gli usi di un metodo in vim
- 5. Come possono essere usati gli oggetti spostati?
- 6. Firebase è un database per tutti gli usi?
- 7. Come si possono tracciare in modo affidabile gli usi CSS?
- 8. Quali sono tutti gli usi di '@' in C#?
- 9. Terminologia: gli eventi possono essere "lanciati"?
- 10. Elenco di tutti gli utenti che possono connettersi tramite SSH
- 11. 'Gli argomenti di tipo non possono essere dedotti dall'uso'
- 12. Gli oggetti DateAlime di SQLAlchemy possono essere solo ingenui?
- 13. Gli eventi possono essere Inter-Process?
- 14. Gli iteratori possono essere ripristinati in Python?
- 15. Controllare se tutti gli elementi possono essere trovati in un altro array
- 16. PhpStorm trova tutti gli usi obsoleti nel progetto
- 17. Quali caratteristiche di Scala non possono essere tradotte in Java?
- 18. Gli elementi di una JList possono essere formattati come HTML
- 19. Gli errori di sintassi possono essere catturati in JavaScript?
- 20. Come gli atomi di Erlang possono essere raccolti dalla spazzatura
- 21. Come faccio a grep (cercare) un report Crystal per tutti gli usi di una colonna?
- 22. Trova tutti gli usi di un metodo (anche tramite interfaccia) utilizzando NDepend
- 23. Rimuovi tutti gli oggetti da un UIView
- 24. Come posso trovare tutti gli usi di un namespace e dei suoi membri?
- 25. Ruby offre un equivalente di uso rigoroso di Perl?
- 26. Gli acquisti di lattine da app possono essere testati nel simulatore IOS 8 (XCode 6)?
- 27. Quali sono gli usi comuni di UDP?
- 28. Dove posso trovare tutti gli oggetti COM che possono essere creati in PowerShell?
- 29. layout di Android: Questo tag ed i suoi figli possono essere sostituiti da una <TextView/> e un composto disegnabile
- 30. IDE Java - trova tutti gli usi/riferimenti INDIRETTI di una funzione o classe?
In questo esempio; no. Per essere onesti, non sono sicuro al 100% che sia una sintassi valida e che non abbia avuto la possibilità di controllare. Ma ho visto esempi lungo linee simili –
Infatti, l'ho appena provato con la scala 2.9.1 e ** non si compila **! Potresti correggerlo, non posso farlo per te, non ho mai usato/necessario il costrutto 'forSome'. – paradigmatic
Risolto lungo le linee suggerite dal retronym –