我将首先解释限制范围的含义:
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和if等结构的使用(仅在可能的情况下),删除列表的创建并只允许执行/引用我在允许的命名空间中定义的习语。
是否有工具可以做到这一点,而不覆盖所有标准习语?
如果没有,是否有一种自动方式(可能通过反射)来覆盖导入到命名空间的所有标准习语?