PowerShell有method_missing()方法吗?

3

我一直在研究PowerShell的动态能力,想知道是否有类似于Ruby的 method_missing() 的东西,在对象调用不存在的方法时可以设置一个“捕捉所有方法”的机制来动态处理?

3个回答

2
不,不完全是这样。我怀疑下一个 PowerShell 版本将更符合 .NET 4 添加的动态分派功能,但目前来说,在纯 PowerShell 中实现这一点是不可能的。
尽管我记得有一个组件模型类似于在 .NET 的 TypeDescriptor 中找到的用于创建对象,提供属性和方法动态地给 PowerShell 使用。例如,这就是 XML 元素能够像对象一样被处理的方式。但如果有的话,这种方法文档很少,而且据我的经验,许多需要集成的类型/方法都被标记为内部。

+1 是 [xml] 字面量让我觉得这一定是可能的。 - Willbill

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逻辑。

0

这样做可以处理问题,但不是从正确的位置。我希望对象本身对不存在的方法调用有有用的响应。 - Willbill

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接