【问题标题】:IronPython Method OverloadingIronPython 方法重载
【发布时间】:2012-01-26 19:29:31
【问题描述】:

我有一些 IronPython 代码正在使用以下构造函数创建 Mutex:

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 属性来强制使用不同的重载,它会正确执行。有谁知道我哪里出错了?

【问题讨论】:

  • 让构造函数具有out 参数听起来不是一个好主意。作为工厂方法会更好。
  • @JeffMercado,他在这里谈论的是System.Threading.Mutex 的构造函数——他根本不拥有该构造函数的签名设计。

标签: .net ironpython


【解决方案1】:

您可以像这样将out bool 显式传递给构造函数:

success = clr.Reference[bool]()
mutex = Mutex(True, 'some_mutex', success)

# success.Value is your bool result

这让重载解析的东西只管做它的事。

我不太确定如何从__new__.Overloads 中提取正确的方法,但必须有一种方法。如果我只是说Mutex.__new__.Overloads,它会显示一个列表,其中包含您正在寻找的重载。

【讨论】:

  • 不知道你可以传入这样的 clr 引用类型,谢谢你的提示!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-09-30
  • 1970-01-01
  • 2012-02-16
  • 2010-10-30
相关资源
最近更新 更多