我使用Iron Python作为免费的附加工具来测试将通信包装到某些定制硬件的API,以便非开发团队可以通过python与硬件一起玩。使用来自IronPython的可变参数调用CLR方法
但是我无法弄清楚如何让.NET void func(params object[] args)
映射到Python def (*args)
。
这里有一些代码来解释。
我有一个类型,允许注入日志回调格式和处理消息是在Console.WriteLine和Debug.WriteLine的签名之后。
public class Engine
{
Action<string, object[]> _logger;
public void Run()
{
Log("Hello '{0}'", "world");
}
public void SetLog(Action<string, object[]> logger)
{
_logger = logger;
}
void Log(string msg, params object[] args)
{
_logger(msg, args);
}
}
在我的IronPython代码
import clr
from System import *
from System.IO import Path
clr.AddReferenceToFileAndPath(Path.GetFullPath(r"MyAssembly.dll"))
from MyNamespace import *
def logger(msg, *args):
print(String.Format(msg, args))
print(String.Format(msg, list(args)))
print(String.Format(msg, [args]))
a=[]
for i in args:
a.append(i)
print(String.Format(msg, a))
e = Engine()
e.SetLog(logger)
e.Run()
输出
Hello '('world',)'
Hello 'IronPython.Runtime.List'
Hello 'IronPython.Runtime.List'
Hello 'IronPython.Runtime.List'
我想
Hello 'world'
可能重复array](http://stackoverflow.com/questions/1107789/assigning-a-iron-python-list-to-net-array) – 2012-08-17 12:54:53
如果它是该职位的副本那么要么我不明白我自己的问题或者我不理解他们的(或两者:-) – 2012-08-17 13:17:14
我认为@HansPassant引用的问题不是一个硬复本,而是暗示其中一个可能的解决方案(请参阅我的答案和答案rsion到'Array [object]')。 – 2012-08-19 12:28:27