Написание метода железного питона с параметром ref или out - PullRequest
7 голосов
/ 18 мая 2010

Мне нужно перевести следующий метод C # на тот же метод IronPhyton

private void GetTP(string name, out string ter, out int prov)
{
  ter = 2;
  prov = 1;
}

Ответы [ 2 ]

5 голосов
/ 18 мая 2010

В python (и, следовательно, в IronPython) вы не можете изменить параметр, который не является изменяемым (например, строки)

Таким образом, вы не можете напрямую перенести данный код в python, но вы должны сделать что-то вроде:

def GetTP(name):
  return tuple([2, 1])

и когда вы звоните, вы должны сделать:

retTuple = GetTP(name)
ter = retTuple[0]
prov = retTuple[1]

это то же самое поведение, когда в IronPython вы вызываете метод C #, содержащий параметры out / ref.

Фактически, в этом случае IronPython возвращает кортеж параметров out / ref, и, если есть возвращаемое значение, оно является первым в кортеже.

EDIT: на самом деле можно переопределить метод с параметрами out / ref, смотрите здесь:

http://ironpython.net/documentation/dotnet/dotnet.html#methods-with-ref-or-out-parameters

1 голос
/ 20 июля 2016

скрипт Python примерно так должен работать:

ter = clr.Reference[System.String]()
prov = clr.Reference[System.Int32]()

GetTP('theName', ter, prov)

print(ter.Value)
print(prov.Value)
...