powershell有method_missing()吗?

发布于 2024-09-16 07:13:29 字数 131 浏览 4 评论 0原文

我一直在研究 powershell 的动态功能,我想知道

powershell 中是否有类似于 Ruby 的 method_missing() 的东西,您可以在其中设置“捕获所有方法”来动态处理对您的计算机上不存在的方法的调用物体?

I have been playing around with the dynamic abilities of powershell and I was wondering something

Is there is anything in powershell analogous to Ruby's method_missing() where you can set up a 'catch all method' to dynamically handle calls to non-existant methods on your objects?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

挽你眉间 2024-09-23 07:13:29

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

尽管我确实记得有一个类似于 .NET 的 TypeDescriptor 中的组件模型,用于创建动态向 PowerShell 提供属性和方法的对象。例如,这就是如何将 XML 元素视为对象。但是,这根本没有记录,而且根据我的经验,集成所需的许多类型/方法都被标记为内部。

No, not really. I suspect that the next version of PowerShell will become more in line with the dynamic dispatch capabilities added to .NET 4 but for the time being, this would not be possible in pure PowerShell.

Although I do recall that there is a component model similar to that found in .NET's TypeDescriptor for creating objects that provide properties and methods dynamically to PowerShell. This is how XML elements are able to be treated like objects, for example. But this is poorly documented if at all and in my experience, a lot of the types/methods needed to integrate are marked as internal.

初吻给了烟 2024-09-23 07:13:29

你可以模仿它,但这很棘手。该技术在 Lee Holmes 的书中进行了描述,可归结为两个脚本 - Add-RelativePathCapture http://poshcode.org/2131< /a> 和 New-CommandWrapper http://poshcode.org/2197

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

You can emulate it, but it's tricky. The technique is described in Lee Holmes book and is boiled down to two scripts - Add-RelativePathCapture http://poshcode.org/2131 and New-CommandWrapper http://poshcode.org/2197.

The essence is - you can override any cmdlet via New-CommandWrapper. Thus you can redefine Out-Default that is implicitly invoked at the end of almost every command (excluding commands with explicit formatters like Format-Table at the end). In the new Out-Default you check if the last command threw an exception saying that no method / property was found. And there you insert your method_missing logic.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文