Могу ли я использовать именованные и необязательные аргументы в ironpython - PullRequest
3 голосов
/ 02 августа 2010

Я надеюсь загрузить .net dll в ironpython.

Но одна из статических функций в .net dll имеет некоторые Именованные и Необязательные Аргументы.

вроде Draw (weight: w,высота: ч, площадь = 1)

Могу ли я использовать только полные аргументы?

Ответы [ 2 ]

6 голосов
/ 04 августа 2010

Именованные и дополнительные параметры полностью поддерживаются.В .NET уже давно они есть для поддержки VB.NET, и поэтому IronPython с самого начала поддерживал этот способ.Новый синтаксис C # соответствует тем же базовым метаданным, что и старая поддержка VB.

Для вызова вы используете f (x = 42), который является синтаксисом именованных параметров Python.Для необязательных параметров вы можете просто не указывать их.В вашем примере вы можете сделать Draw (вес, рост) и оставить Area вне.Или вы можете вызвать w / weight и height в качестве именованных параметров и оставить Area вне.

Базовые метаданные .NET, которые ищет IronPython, это либо OptionalAttribute, либо DefaultParameterValueAttribute.Для необязательных мы передаем default (T), если тип не является объектом, и в этом случае мы передаем Missing.Value.Это в целом соответствует тому, как рефлексия также вызывает эти API.

0 голосов
/ 02 августа 2010

Как говорит этот вопрос SO , новые именованные аргументы .NET не поддерживаются в IronPython (который использует именованные аргументы для конструкторов, которые он вызывает для установки свойств).

Для дополнительных, как этот пост говорит,

для необязательных параметров, таких как Аргументы в адресный индексатор вы можно использовать Missing.Value, чтобы использовать по умолчанию.

после, конечно, from System.Reflection import Missing.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...