Ruby中的委托是什么?

时间:2013-12-12 01:53:59

标签: ruby delegation

我在教科书中遇到过这个问题,但我甚至不知道代表团是什么。我知道包含是什么,但不知道代表团是什么。

  

在Ruby的上下文中,将委托与模块包含进行比较   类接口概念的术语。

     

通过模块包含,模块中定义的方法成为其中的一部分   类的接口(及其所有子类)。不是这种情况   与代表团合作。

你能用外行的话来解释吗?

2 个答案:

答案 0 :(得分:5)

简单地说,委托就是当一个对象使用另一个对象进行方法调用时。

如果你有这样的事情:

class A
  def foo
    puts "foo"
  end
end

class B
  def initialize
    @a = A.new
  end

  def bar
    puts "bar"
  end

  def foo
    @a.foo
  end
end

当调用其foo方法时,B类的实例将使用A类的foo方法。换句话说,B的实例将foo方法委托给A类。

答案 1 :(得分:2)

class A
  def answer_to(q)
    "here is the A's answer to question: #{q}"
  end
end

class B
  def initialize(a)
    @a = a
  end
  def answer_to(q)
    @a.answer_to q
  end
end

b = B.new(A.new)

p b.answer_to("Q?")


module AA
  def answer_to(q)
    "here is the AA's answer to question: #{q}"
  end
end

class BB
  include AA
end

p BB.new.answer_to("Q?")

B将问题委托给A,而BB使用模块AA来回答问题。