J'ai le suivant:
serv match {
case "chat" => Chat_Server ! Relay_Message(serv)
case _ => null
}
Le problème est que, parfois, je passe également un paramètre supplémentaire à la fin de la chaîne de service, donc:
var serv = "chat.message"
Est-il possible de faire correspondre une partie de la chaîne afin qu'elle soit toujours envoyée à Chat_Server?
Merci pour toute aide, très appréciée :)
Utilisez des expressions rationnelles;)
val Pattern = "(chat.*)".r
serv match {
case Pattern(chat) => "It's a chat"
case _ => "Something else"
}
Et avec les expressions rationnelles, vous pouvez même facilement scinder un paramètre et une chaîne de base:
val Pattern = "(chat)(.*)".r
serv match {
case Pattern(chat,param) => "It's a %s with a %s".format(chat,param)
case _ => "Something else"
}
Faites en sorte que la correspondance de modèle soit liée à une variable et utilisez un guard pour vous assurer que la variable commence par "chat"
// msg is bound with the variable serv
serv match {
case msg if msg.startsWith("chat") => Chat_Server ! Relay_Message(msg)
case _ => null
}
Si vous souhaitez supprimer des groupements lorsque vous utilisez des expressions rationnelles, veillez à utiliser un caractère générique de séquence tel que _*
(selon la documentation de Scala ).
De l'exemple ci-dessus:
val Pattern = "(chat.*)".r
serv match {
case Pattern(_*) => "It's a chat"
case _ => "Something else"
}