2012-01-26 1 views
2

가 나는 다음과 같은 생성자를 사용하여 뮤텍스를 만드는 일부 IronPython의 코드가 과부하 : 마지막 매개 변수가 out 매개 변수이기 때문에IronPython의 방법

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

당신이 방법에 건네 대신하지 않습니다 이 코드는 뮤텍스 객체가 반복 가능한 아니라고 말하는 형식 오류가 발생합니다 실행하면

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

: 그것은이 같은 여분의 반환 값이됩니다. IronPython이 하나의 값만 리턴하기 때문에 IronPython이 올바른 과부하를 선택하지 않는다고 생각하게됩니다. Ironpython 설명서에는 메서드 개체에 대해 Overloads 메서드를 사용하여 호출되는 정확한 오버로드를 제어 할 수 있다고 나와 있습니다.

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

내가 오버로드를 사용하려고하면이 제대로 실행하는 다른 오버로드를 사용하여 강제로 속성 :

코드의 다음 비트는, 그러나, 내가 얻을 수있는 ValueError를 인덱스가 범위를 벗어났습니다한다는을 시도합니다 . 누구 내가 잘못 가고 있는지 알아?

+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

관련 문제