2 Stimmen

Ist es möglich, einen "eingeschränkten Bereich" in Scala zu erstellen?

Ich werde erklären, was ich meine beschränkter Geltungsbereich Erstens:

restrictedScope (allowedNamespace) {
   /* THE CLIENT CODE GOES HERE */
   /* the namespace in this closure is limited only to the idioms
      I allow, both in terms of reserved words and standard functions */

   val result = allowedNamespace.run(); // works, since run() ...
   // ... is a function of allowedNamespace
   val list = new List(); // does not work, since List is not in scope

   /* CLIENT CODE SAMPLE (prepare, release and wait are defined in allowedNamespace) */
   prepare( "service 1" )
   wait( 1000 )
   release( "service 1" )
   ...

}

Während ich eine streng imperative DSL auf Basis von regulärem Scala-Code ausführe, möchte ich den Client-Code sicher ausführen. Und um dies sicher zu tun, möchte ich vielleicht die Verwendung von Konstruktionen wie für y wenn (nur wenn möglich), entfernen Sie die Erstellung von Listen und erlauben Sie nur die Idiome, die ich im erlaubten Namensraum definiere, ausgeführt/bezogen zu werden.

Gibt es Möglichkeiten, dies zu tun, ohne alle Standard-Idiome außer Kraft zu setzen?

Wenn nicht, gibt es einen automatischen Weg (wahrscheinlich über Reflexion), um alle Standard-Idiome, die in den Namensraum importiert werden, zu überschreiben?

3voto

Debilski Punkte 65106

Ce site könnte mit experimentellen Makros in Scala 2.10 möglich sein, die es Ihnen erlauben würden, den Code innerhalb restrictedScope vor dem Kompilieren.

Ich denke jedoch, dass es schwierig sein wird, den Baum nach erlaubten und verbotenen Methoden zu filtern. Ich bin mir also nicht sicher, ob dies machbar ist.

Alternativ können Sie auch das experimentelle scala-virtualisiert Zweig, der es Ihnen zumindest erlauben würde, einfach die for y if Aussagen nach eigenem Gutdünken. ( Referenz )

Dies erfordert jedoch auch die Bereitstellung eines eigenen Compilers, so dass es wirklich vom Umfang Ihres Problems und der angestrebten Benutzergruppe abhängt. ( Weitere Informationen über Scala-DSLs. )

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X