Перегрузка метода IronPython - PullRequest
2 голосов
/ 26 января 2012

У меня есть некоторый код 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 для принудительного использования другой перегрузки, он выполняется правильно. Кто-нибудь знает, где я иду не так?

1 Ответ

1 голос
/ 29 января 2012

Вы можете явно передать out bool в конструктор следующим образом:

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

# success.Value is your bool result

Это позволяет вещам с разрешением перегрузки просто делать свое дело.

Я не совсем уверен, какизвлечь правильный метод из __new__.Overloads, но должен быть способ.Если я просто скажу Mutex.__new__.Overloads, он покажет мне список, который включает искомую перегрузку.

...