【发布时间】:2012-08-07 22:09:33
【问题描述】:
我的应用程序可以通过用户提供的 IronPython 脚本进行扩展。
- 首先,我创建一个新的
ScriptScope。 - 使用该脚本范围,我运行了一个简短的设置脚本来执行一些方便的导入。
- 最后,我在准备好的范围内运行所有用户脚本。
设置脚本如下所示:
import clr
import System
from System import Exception
from System import Math
clr.ImportExtensions(System.Linq.Enumerable)
这个想法是用户脚本可以使用常见的类型,如Math 或Exception,而无需先导入它们。
我还希望 LINQ 开箱即用,因此我将最后一行添加到设置脚本中。但是,虽然常规导入工作正常,但扩展导入却不行。据我所知,常规导入成为脚本范围的一部分,因此可用于在同一范围内运行的任何后续脚本。然而,扩展导入的工作方式似乎有所不同。
所以我的问题是:我执行的脚本如何使用 LINQ 而无需显式导入扩展方法?
注意:有很多脚本,其中许多只包含一个表达式。所以我宁愿避免使用扩展导入自动为每个脚本添加前缀的性能损失。
【问题讨论】:
-
你看过mail.python.org/pipermail/ironpython-users/2011-May/014829.html 吗?这可以解释您所面临的行为吗?
-
@Simon:感谢您提供的链接,这肯定解释了这种行为。现在,如果他们实现了上一篇文章中的建议:“一个 clr.ImbueTypeWithExtensions(cls, extcls) 方法......使扩展在任何地方都可用。”
-
我不相信有办法按照您的要求进行操作。您能否创建一个问题 (ironpython.codeplex.com/WorkItem/Create) 描述您希望看到的内容?
标签: extension-methods ironpython