J'ai essayé de créer une méthode Edit: Voici le code que j'essaie d'utiliser. J'ai commuté le code de la section précédente de sorte que Eclipse dit unapply code> à utiliser dans la correspondance de motif, et j'ai essayé de le faire renvoyer quelque chose de différent de
Option code>, cependant, Eclipse montre que comme une erreur . Est-ce une règle que
non applique code> doit renvoyer une option
[t] code>?
non apply code> renvoie un booléen p>
Nombre incorrect d'arguments pour Numéro d'objetMatcher code>. Pourquoi est-ce? P> p>
4 Réponses :
Jetez un oeil à ce exemple à nouveau. Je cite p>
Le type de retour d'un peu applique doit être choisi comme suit:
* Si c'est juste un test, renvoyez un booléen. Par exemple cas même ()
* S'il renvoie une seule sous-valeur de type T, renvoyez une option [t]
* Si vous souhaitez renvoyer plusieurs sous-valeurs T1, ..., TN, les groupez-les dans une option de tuple optionnelle [(T1, ..., TN)]. P> blockQuote>
Pouvez-vous me montrer ce que je devrais modifier pour que l'UNAPPLY qui retourne un booléen au travail?
Vous ne pouvez pas extraire un argument lors du retour des booléens. C'est juste Numéro de casmatcher () => ... code>.
Si vous souhaitez renvoyer quelque chose avec Voici comment une correspondance de motif est traduite: p> supposant si devient p> Notez que ceci est un très superficiel em> explication. Les correspondances de cas peuvent tester les constantes, avoir des conditions de garde supplémentaires, des alternatives, une utilisation non apply code>, renvoyez-le à l'intérieur
quelques code>. Retour
Boolean Code> Tests simplement si la correspondance peut être faite ou non.
NumériquesMatcher code> renvoie
option [...] code>, il fera: p>
NumberMatcher code> retourne Boolean, alors vous pouvez avoir reçu quelque chose. Dans ce cas, c'est ce qui se passe: p>
unapply code> récursivement, utilisez
unapplyseq code>, etc. Ici, je n'ai montré que l'utilisation très basique pour répondre à une spécificité question. Je conseille fortement de chercher une explication plus complète de la correspondance des motifs. P> p>
Lorsque vous avez défini Alternativement, pour créer non apply code> pour renvoyer un
booléen code>, vous indiquiez que le motif n'a pas de caractères génériques pour correspondre (ou lier). Donc, la déclaration de cas pour ce non contracteur doit être
Numéro de casmatcher => println (str) code> et lui donner une variable à remplir est incorrect. P>
NumberateMatcher (Groupe) => println (groupe) code> Vous devez définir
non apply () code> pour renvoyer
option [string] Code> p>
package com.tutorial.extracters object ExtracterwithBooleanReturnType extends App { import java.util.regex._ object NumberMatcher { def apply(x: String*) = { x } def unapply(x: String): Option[Boolean] = { val pat = Pattern.compile("\\d+") val matcher = pat.matcher(x) return Some(matcher.find) } } val strings = NumberMatcher("geo12", "neo493", "leo") for (str <- strings) { str match { case NumberMatcher(group) => println(group) case _ => println("no") } } } we can achieve this with above code as well