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?