c# - 将 C# 与 IronPython 连接 - 获取返回值

标签 c# .net ironpython

我正在尝试在我们的应用程序的一部分中实现对 IronPython 的支持,该部分使用脚本并且目前支持多种现有语言,例如 Lua。

场景是我们既需要支持脚本的返回值(使用语言的 return 或等效语法),也需要在退出时读取,并在执行前写入要在整个脚本中使用的变量。

我在使用 IronPython 时遇到的问题是它似乎不允许在函数外的脚本中使用 return。因此,我可以将所有脚本包装在一个函数中,尽管这很麻烦,因为我必须缩进所有代码,虽然这本身并不是一个大问题,但似乎脚本中引用的任何变量都被视为函数范围局部变量,并且GetVariable/SetVariable 方法不允许我将它们指定为全局变量,因此 now 方法包装脚本失败,因为它找不到由 GetVariable 和 SetVariable 设置的变量。

以脚本为例:

integerVar = integerVar + 10
stringVar = stringVar + " modified"
return true

不会直接起作用,因为返回语句由于不在方法中而失败。包装在一个函数中:

def run():
    integerVar = integerVar + 10
    stringVar = stringVar + " modified"
    return true

当使用“赋值前引用的局部变量‘integerVar’”调用该方法时失败,尽管之前已在作用域上使用 SetVariable 进行了设置。

有什么方法可以让我执行 IronPython 脚本,既可以获取从 return 语句返回的任何值,又可以在执行之前设置要由脚本操作的值,并获取它们的值执行后的值(value)观?

最佳答案

您需要在函数中使用“global”关键字。示例如下:

def run():
    global intergerVar
    integerVar = integerVar + 10
    stringVar = stringVar + " modified"
    return true

更多示例和信息可以引用this thread .

关于c# - 将 C# 与 IronPython 连接 - 获取返回值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38077291/

相关文章:

c# - ASP.NET Core 1.1 用户身份模拟

c# - Entity Framework 1对0或1关系配置

c# - 如何使用 IE/.Net/C# 进行真正的多线程网络挖掘?

c# - Windows 服务应用程序 Controller

c# - C#Python输入法返回错误

c# - 如何在托管 IronPython 2.0 时发布模块 "__main__"?

c# - 为什么 'Any CPU' 应用程序在 x64 机器上以 x86 运行?

c# - 转换到 Func 与新 Func?

C# 反射 : How to get the type of a Nullable<int>?

python - CPython 还是 IronPython?