我有一些使用以下构造函数创建Mutex的IronPython代码:
public Mutex( bool initiallyOwned, string name, out bool createdNew )
由于最后一个参数是一个out参数,你不会将它传递给方法,而是变成一个额外的返回值,如下所示:
mutex, sucess = Mutex(True, 'some_mutex')
当此代码运行时,它会抛出一个TypeError,表示Mutex对象不可迭代。由于它只返回一个值,这让我相信IronPython没有选择正确的重载。 Ironpython文档说您可以通过对方法对象使用Overloads方法来控制调用的确切重载。
下面的代码尝试了,但是,我得到一个ValueError,指出索引超出了范围:
new_mutex = Mutex.__new__.Overloads[type(True), String, type(True)]
mutex, sucess = new_mutex(Mutex, True, 'some_mutex')
如果我尝试使用Overloads属性强制使用不同的重载,它会正确执行。谁知道我哪里出错?
答案 0 :(得分:1)
你可以像这样明确地将out bool
传递给构造函数:
success = clr.Reference[bool]()
mutex = Mutex(True, 'some_mutex', success)
# success.Value is your bool result
这让重载解析的东西就可以了。
我不太确定如何从__new__.Overloads
中提取正确的方法,但必须有一种方法。如果我只是说Mutex.__new__.Overloads
,它会显示一个包含您正在寻找的重载的列表。