【问题标题】:How can I intercept a method call in Boo?如何拦截 Boo 中的方法调用?
【发布时间】:2010-11-11 23:16:17
【问题描述】:

Ruby 有method_missing,Python 有getattr。 Boo 是否提供了一些我可以用来拦截方法调用的东西?

【问题讨论】:

    标签: .net boo intercept method-missing


    【解决方案1】:

    是的,Boo 有 IQuackFu

    基本上,你实现IQuackFu,它有三个方法:

    • QuackGet: 当你得到一个属性值时被调用
    • QuackSet 在您设置属性值时被调用
    • QuackInvoke:调用方法时被调用

    这里是an example

    【讨论】:

    • 一个小问题:Boo 可以拦截其他对象的方法调用吗?有点像 Groovy 对元类所做的。我认为答案是否定的,因为它是静态类型的,但我想确定一下。
    • 我不认为你可以像 Groovy 那样做,但你可以使用启用 IQuackFu 的类来包装/装饰另一个类。启用 IQuackFu 的类可以有一个方法和属性字典来实现扩展行为。
    • Boo 不像 groovy 那样真正动态,您不能在运行时更改类型的定义。如果您将变量声明为“鸭子”,它本质上是编译器魔术,将其转换为对该对象的后期绑定,如果可用,它将通过 IQuackFu 流动。 Boo 中没有实际的元类。你需要 IronRuby 或 IronPython 来获得更像元类的东西。
    猜你喜欢
    • 1970-01-01
    • 2014-10-11
    • 1970-01-01
    • 2011-06-11
    • 1970-01-01
    • 2012-04-01
    • 2021-09-16
    相关资源
    最近更新 更多