Есть ли у powershell метод method_missing()?

Я играл с динамическими способностями PowerShell, и мне было интересно

Есть ли в PowerShell что-нибудь, аналогичное методу Ruby method_missing(), в котором вы можете настроить метод 'catch all' для динамической обработки вызовов несуществующих методов ваших объектов?

3 ответа

Решение

Нет, не совсем. Я подозреваю, что следующая версия PowerShell станет более совместимой с возможностями динамической отправки, добавленными в.NET 4, но в настоящее время это невозможно сделать в чистом PowerShell.

Хотя я и вспоминаю, что существует модель компонентов, аналогичная той, что была в TypeDescriptor.NET для создания объектов, которые динамически предоставляют свойства и методы для PowerShell. Вот как элементы XML могут обрабатываться, например, как объекты. Но это плохо документировано, если вообще, по моему опыту, многие типы / методы, необходимые для интеграции, помечены как внутренние.

Вы можете подражать этому, но это сложно. Техника описана в книге Ли Холмса и сводится к двум сценариям - Add-RelativePathCapture http://poshcode.org/2131 и New-CommandWrapper http://poshcode.org/2197.

Суть в том, что вы можете переопределить любой командлет через New-CommandWrapper. Таким образом, вы можете переопределить Out-Default, который неявно вызывается в конце почти каждой команды (исключая команды с явными форматерами, такими как Format-Table в конце). В новом Out-Default вы проверяете, не выдает ли последняя команда исключение, говоря, что метод / свойство не найдено. И там вы вставляете свою логику method_missing.

Вы можете использовать Try Catch в Powershell 2.0

http://blogs.technet.com/b/heyscriptingguy/archive/2010/03/11/hey-scripting-guy-march-11-2010.aspx

Другие вопросы по тегам