Dans Haskell, je peux écrire read "(1,2)"
et récupérer le tuple (1,2)
. Y a-t-il un moyen de faire ça à Scala? Je suppose que ce que je cherche est l'accès à l'analyseur dans l'interpréteur scala
.Est-ce que Scala a un équivalent à Prelude.read de Haskell?
Répondre
Avez-vous essayé de fouiller dans scala.tools.nsc?
Est-ce que quelque chose comme ça suffit pour vos besoins (ou, au moins, un bon point de départ)?
scala> val interpreter = new tools.nsc.Interpreter
interpreter: scala.tools.nsc.Interpreter = [email protected]
scala> interpreter interpret "(3, 5)"
res0: (Int, Int) = (3,5)
res139: scala.tools.nsc.InterpreterResults.Result = Success
scala> interpreter interpret "1 to 10 toList"
res1: List[Int] = List(1, 2, 3, 4, 5, 6, 7, 8, 9, 10)
res140: scala.tools.nsc.InterpreterResults.Result = Success
[Modifier: il semble que tools.nsc.Interpreter est obsolète. Il y a maintenant un paquet tools.nsc.interpreter]
Vous pouvez être intéressé par l'API du compilateur Scala. Vous devez probablement compiler la source et l'exécuter. C'est AFAIK comment c'est fait dans l'interprète de Scala.
Rappelez-vous ces questions:
- Il peut être lent.
- Cela peut être un goulot d'étranglement dans les applications multithread. Charger une classe AFAIK nécessite une synchronisation (à cause de JIT etc.).
- Il peut être non sécurisé. Vous pouvez être intéressé par la définition de restrictions de sécurité JVM.
Il y a une info à propos de compilateur Scala (as in this thread), mais il peut être dépassée: Si vous avez besoin d'une information verbeux, vous devrez probablement télécharger la source et générer scaladoc.
Je ne suis pas votre motivation pour l'utiliser, mais vous pouvez également être intéressé par JSR 223: Scripting for the Java™ Platform API, si vous n'avez pas besoin de Scala.
Si vous souhaitez uniquement charger des structures de données, vous devez envisager d'autres moyens, par ex. Soulevez la bibliothèque JSON que vous pouvez download from Maven ou directly download. La bibliothèque vous permet de sérialiser/désérialiser les classes de cas.
Merci! Le compilateur lui-même est probablement trop lourd. Je veux être capable de lire quelque chose comme "[Foo (3, 3)," foo ", 4]" et récupérer une structure de données Scala. Est-il un moyen de le faire sans utiliser l'API du compilateur? – Bill
Eh bien, si vous voulez seulement lire une structure, qu'en est-il de l'utilisation de la désérialisation de Lift JSON? – v6ak
et si json n'est pas votre poison, essayez le support de l'analyseur dans scala, qui est conçu pour fonctionner dans * exactement * de cette façon. –
- 1. Haskell équivalent de scala recueillir
- 2. Est-ce que Scala a un rendement C# équivalent?
- 3. Tissu équivalent à Haskell?
- 4. Est-ce que Scala a des gardes?
- 5. Scala équivalent à wsdl2java?
- 6. Scala Hoogle équivalent?
- 7. Scala équivalent de java.util.Scanner
- 8. erreur se Prelude.read: pas parse
- 9. erreur de programme: Prelude.read: pas parse
- 10. Haskell équivalent de C __LINE__
- 11. Schéma équivalent à Haskell où la clause
- 12. Est-ce que Solr a un équivalent à CompassQueryBuilder?
- 13. Est-ce que Python a un équivalent à 'switch'?
- 14. est-ce que cdb/windbg a un équivalent à autoexp.dat?
- 15. Est-ce que jQuery a un équivalent à dojo.require?
- 16. Est-ce que JPA a un équivalent à Hibernate SQLQuery.addScalar()?
- 17. Scala équivalent de Task.Factory.StartNew .NET?
- 18. Est-ce que VB6 a un équivalent de #pragma pack?
- 19. est-ce que UIImage a un équivalent de myLabel.hidden = YES?
- 20. Scala ListBuffer (ou équivalent) shuffle
- 21. Haskell équivalent de "Construct" de Python
- 22. Est-ce que ArrayObject de PHP a un équivalent in_array?
- 23. Est-ce que Mercurial a un équivalent de git clean?
- 24. Est-ce que Haskell a des variables?
- 25. Ajout Monadique Bind opérateur de Haskell à Scala
- 26. Scala équivalent de l'opérateur `` de ?? en C#
- 27. Scala équivalent de nouvelle HashSet (Collection)
- 28. Est-ce que NotifyIcon a un équivalent MouseDown?
- 29. Scala a un compilateur intelligent?
- 30. équivalent Java de requête scala dans MongoDB
C'est parfait - merci! – Bill
Jetez également un oeil à 'eval'. Vous devez fournir des types, mais cela est particulièrement utile car il renvoie le type avec lequel l'expression se termine. –