2012-01-26 30 views
2

我有一個使用下面的構造函數創建一個互斥體的一些IronPython的代碼:IronPython的方法重載

public Mutex(
    bool initiallyOwned, 
    string name, 
    out bool createdNew 
) 

由於最後一個參數是一個OUT參數你不將它傳遞給方法,而是運行此代碼時,它拋出一個TypeError說,互斥對象不是可迭代

mutex, sucess = Mutex(True, 'some_mutex') 

:它成爲一個額外的返回值是這樣的。由於它只返回一個值,這導致我相信IronPython沒有選擇正確的過載。 Ironpython文檔說,你可以通過在方法對象上使用Overloads方法來控制調用的確切的重載。

下面的代碼位企圖,即,但是,我得到一個ValueError指出該指數超出範圍:

new_mutex = Mutex.__new__.Overloads[type(True), String, type(True)] 
mutex, sucess = new_mutex(Mutex, True, 'some_mutex') 

如果我嘗試使用過載屬性使用不同的過載是正確執行強制。任何人都知道我要去哪裏錯了?

+0

這聽起來不是一個好主意,使構造函數有'out'參數。作爲工廠方法會更好。 –

+0

@JeffMercado,他在這裏討論'System.Threading.Mutex'的構造函數 - 他根本不擁有該構造函數的簽名設計。 – sblom

回答

2

你可以明確地傳遞out bool像這樣的構造:

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

# success.Value is your bool result 

這讓重載東西只是做它的事。

我不太清楚如何從__new__.Overloads中提取正確的方法,但必須有一種方法。如果我只是說Mutex.__new__.Overloads,它會向我顯示一個列表,其中包含您要查找的超載。

+0

不知道你可以通過一個clr參考類型那樣,謝謝你的提示! – cmotley