【问题标题】:Delegators in rubyruby 中的委托
【发布时间】:2014-08-09 00:44:20
【问题描述】:

我知道委托方法调用有三种方式。

  1. SimpleDelegator
  2. 使用委托类
  3. 使用抽象类 Delegator

我知道什么是委托以及它是如何工作的。我知道如何使用 SimpleDelegator 委托方法调用。但我不确定何时使用它们。谁能给我一些关于何时使用它们的提示。以及如何使用 DelegateClass 完成委托。

【问题讨论】:

    标签: ruby delegates delegation


    【解决方案1】:

    SimpleDelegator 只是Delegator 的基本实现。 DelegateClass 实际上是一个定义委托类的方法。 Delegator 通过 method_instance 进行委托,DelegateClass 创建了一个新类,该类实现了与超类提供给它的 API 相同的 API。

    所以,当你不需要任何特别的东西时,你会选择SimpleDelegator

    class AuthorDecorator < SimpleDelegator
      def hi!
        "Hi, #{name}!"
      end
    end
    
    # assuming author is an object that responds to :name method
    AuthorDecorator.new(author).hi! # => "Hi, Rohan!"
    

    如果您想实现更复杂的东西,例如您想完全控制 __setobj____getobj__ 方法(例如类型强制),您可以使用 Delegator

    正如我上面所说,DelegateClass 准备了一个带有预定义方法的委托类。这里的区别在于,当您使用SimpleDelegatorDelegator 时,它依赖于method_missing,因此如果您的委托者没有请求的方法,它将通过method_missing 代理到委托对象。如果准备了带有DelegateClass 的基类,则将有已经定义的方法将在委托对象上调用相同的方法。所以DelegateClass 提供了一种更有效的委派方式。

    【讨论】:

      猜你喜欢
      • 2015-04-25
      • 1970-01-01
      • 2013-12-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-01-12
      • 2023-04-03
      相关资源
      最近更新 更多