powershell有一个method_missing()吗?

时间:2010-08-26 16:57:36

标签: powershell metaprogramming method-missing

我一直在玩PowerShell的动态能力,我想知道一些事情

在PowerShell中是否有类似Ruby的method_missing(),你可以设置一个'catch all方法'来动态处理对象上不存在的方法的调用?

3 个答案:

答案 0 :(得分:2)

不,不是真的。我怀疑下一版本的PowerShell将更加符合.NET 4中添加的动态调度功能,但目前在纯PowerShell中这是不可能的。

虽然我记得有一个类似于.NET的TypeDescriptor中的组件模型,用于创建向PowerShell动态提供属性和方法的对象。例如,这就是XML元素能够像对象一样对待的方式。但是根据我的经验,这很难记录,很多需要集成的类型/方法被标记为内部。

答案 1 :(得分:1)

你可以效仿它,但这很棘手。 Lee Holmes一书中描述了这种技术,并归结为两个脚本 - Add-RelativePathCapture http://poshcode.org/2131和New-CommandWrapper http://poshcode.org/2197

本质是 - 您可以通过New-CommandWrapper覆盖任何cmdlet。因此,您可以重新定义在几乎每个命令结束时隐式调用的Out-Default(不包括具有显式格式化程序的命令,如最后的Format-Table)。在新的Out-Default中,检查最后一个命令是否引发异常,说明没有找到方法/属性。然后你插入你的method_missing逻辑。

答案 2 :(得分:0)