È possibile combinare condizioni di guardia con pattern matching all'interno di dichiarazioni di classi di case sigillate?Scala: è possibile combinare condizioni di guardia con corrispondenze di pattern in primo piano all'interno delle dichiarazioni della classe di case sigillate
Mi rendo conto che è possibile includere condizioni di guardia all'interno del blocco di corrispondenza, ma ritengo che sarebbe utile definire queste condizioni in anticipo nelle classi di casi sigillate. Ciò consentirebbe agli sviluppatori di definire una serie rigorosa di possibili input che il compilatore controllerebbe durante la corrispondenza del modello.
Quindi, in sintesi mi piacerebbe essere in grado di fare l'equivalente di qualcosa di simile:
// create a set of pattern matchable cases with guards built in
sealed abstract class Args
case class ValidArgs1(arg1:Int,arg2:Int) if arg1>1 && arg2<10 extends Args
case class ValidArgs2(arg1:Int,arg2:Int) if arg1>5 && arg2<6 extends Args
case class InvalidArgs(arg1:Int,arg2:Int) if arg1<=1 && arg2>=10 extends Args
// the aim of this is to achieve pattern matching against an exhaustive set of
// pre-defined possibilities
def process(args:Args){
args match
{
case ValidArgs1 = > // do this
case ValidArgs2= > // do this
case InvalidArgs = > // do this
}
}
La funzionalità suggerita non richiede più la scala ha già. È solo uno zucchero sintassi. – ayvango
@ayvango Scala sicuramente non ha supporto per la verifica statica. Cosa intendi e perché il downvote? –
topic starter non necessita di verifica statica. Vuole solo un metodo unpply esteso con suggerimenti forniti. – ayvango