【问题标题】:Does powershell have a method_missing()?powershell 有 method_missing() 吗?
【发布时间】:2011-04-04 09:33:17
【问题描述】:

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

powershell 中是否有任何类似于 Ruby 的 method_missing() 的功能,您可以在其中设置“捕获所有方法”来动态处理对对象上不存在的方法的调用?

【问题讨论】:

    标签: powershell metaprogramming method-missing


    【解决方案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】:

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

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

      【讨论】:

      • +1 是 [xml] 文字让我认为这一定是可能的
      【解决方案3】:

      【讨论】:

      • 这将使我能够处理此案,但从错误的地方。我希望对象本身能够有效地响应对不存在的方法的调用
      猜你喜欢
      • 2011-12-05
      • 2011-03-07
      • 1970-01-01
      • 2012-03-27
      • 1970-01-01
      • 2011-02-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多