最初に、制限されたスコープの意味を説明します。
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" )
...
}
通常のscalaコードに基づいて厳密に命令型のDSLを実行しながら、クライアントコードを安全に実行したいと思います。そして、これを安全に行うために、 forのような構造の使用を制限し、 (可能な場合のみ)リストの作成を削除し、許可された名前空間で定義したイディオムのみを実行/参照できるようにします。
すべての標準的なイディオムを上書きせずに、これを行うための機能はありますか?
そうでない場合、名前空間にインポートされたすべての標準イディオムをオーバーライドする自動方法(おそらくリフレクションを介して)はありますか?