gpt4 book ai didi

ruby - 何时使用 Ruby DelegateClass 而不是 SimpleDelegator? (DelegateClass 方法与 SimpleDelegator 类)

转载 作者:数据小太阳 更新时间:2023-10-29 06:26:37 28 4
gpt4 key购买 nike

可能我遗漏了一些简单的东西,但我不明白如何使用 Ruby 的 DelegateClass方法,我的意思是什么时候使用它而不是 SimpleDelegator类(class)。例如,以下所有内容的工作原理几乎相同:

require 'delegate'

a = SimpleDelegator.new([0])
b = DelegateClass(Array).new([0])
c = DelegateClass(String).new([0])
a << 1
b << 2
c << 3
p a # => [0, 1]
p b # => [0, 2]
p c # => [0, 3]

请注意,将哪个类传递给 DelegateClass 似乎并不重要。

最佳答案

Use subclass SimpleDelegator when you want an object that both has its own behavior and delegates to different objects during its lifetime.

本质上是说当您创建的类不会获得不同的对象时使用 DelegateClass。 TempFile在 Ruby 中只会装饰一个 File 对象SimpleDelegator 可以在不同的对象上重复使用。

Example:

require 'delegate'


class TicketSeller
def sellTicket()
'Here is a ticket'
end
end


class NoTicketSeller
def sellTicket()
'Sorry-come back tomorrow'
end
end


class TicketOffice < SimpleDelegator
def initialize
@seller = TicketSeller.new
@noseller = NoTicketSeller.new
super(@seller)
end
def allowSales(allow = true)
__setobj__(allow ? @seller : @noseller)
allow
end
end

to = TicketOffice.new
to.sellTicket » "Here is a ticket"
to.allowSales(false) » false
to.sellTicket » "Sorry-come back tomorrow"
to.allowSales(true) » true
to.sellTicket » "Here is a ticket"

这是另一个很好的解释a-delegate-matter

关于ruby - 何时使用 Ruby DelegateClass 而不是 SimpleDelegator? (DelegateClass 方法与 SimpleDelegator 类),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13104942/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com