Quelle est la différence entre raw chaîne d'interpolation et triples guillemets dans scala
Scala a une triple chaînes entre guillemets """String\nString"""
utiliser des caractères spéciaux dans la chaîne sans s'échapper. Scala 2.10 également ajouté raw"String\nString"
pour le même but.
Est-il une différence dans la façon dont raw""
et """"""
travail? Peuvent-ils produire de sortie différents pour la même chaîne?
- La vision critique que j'ai obtenu des réponses ci-dessous est qu'en utilisant le "s" de l'interpolateur combiné avec le "triple citation" de l'interpolateur permis de substitution dans une statique multi-modèle ligné. J'étais sur le point d'écrire ma propre quand je l'ai googlé, vu @som-snytt la réponse ci-dessous et est TELLEMENT excité. La façon de l'utiliser est
val template = s"""Hi there, $name! You have $amount credits remaining! Code: ${code}00"""
Les accolades sur le dernier paramètre sont nécessaires en raison de la immédiatement suite de caractères alphanumériques.
Vous devez vous connecter pour publier un commentaire.
À la recherche à la source pour la valeur par défaut interpolateurs (trouvé ici: https://github.com/scala/scala/blob/2.11.x/src/library/scala/StringContext.scala) il ressemble à la "première" de l'interpolateur appelle la fonction identité sur chaque lettre, de sorte à ce que vous mettez dans est ce que vous obtenez. La différence la plus importante que vous trouverez, c'est que si vous fournissez un littéral de chaîne dans votre code source qui inclut la citation de caractères, la crue de l'interpolateur ne fonctionne toujours pas. c'est à dire vous ne pouvez pas dire
mais vous pouvez dire
Donc, vous demandez peut-être "Pourquoi aurais-je jamais la peine à l'aide de la crue de l'interpolateur alors?" et la réponse est que le raw de l'interpolateur encore effectue la substitution de variable. Donc
Vous donnera la chaîne de caractères "bonjour "Monde"!\n" avec le \n n'est pas un être converti en un saut de ligne, et les guillemets autour du mot monde.
raw
fait ces
n'. Je peuxs"""$literal string with substitution"""
. Cela n'explique pas le besoin derow
de toute façon.s""" $myVariable """
- dans ce cas, on peut se demander quelle est la différence de la crue de l'interpolateur et la s de l'interpolateur avec triple guillemets (question légèrement différente...)Il est surprenant de constater que l'utilisation de la s-interpolateur virages s'échappe sur le dos, même lors de l'utilisation de triple guillemets:
Le s-interpolateur ne sait pas que c'est la transformation de la chaîne de pièces qui ont été à l'origine de la triple cité. Donc:
C'est important quand vous êtes à l'aide de barres obliques inverses par d'autres moyens, tels que les regexes: