Ruby 我应该使用什么模式来创建作为其他对象函数的对象?

Ruby 我应该使用什么模式来创建作为其他对象函数的对象?,ruby,design-patterns,Ruby,Design Patterns,我有一个名为LogicSignal 例如,我可以在这些实例上调用一组方法和“操作符”方法 anded = signal_a & signal_b.value_at_cycle_n_minus(2) 将给出当前时间信号_a的值和当前周期-2的信号_b的值的按位and 信号随时间变化,所以当我运行这个 puts signal_a & signal_b advance_time puts signal_a & signal_b anded = signal_a &a

我有一个名为
LogicSignal

例如,我可以在这些实例上调用一组方法和“操作符”方法

anded = signal_a & signal_b.value_at_cycle_n_minus(2)  
将给出当前时间信号_a的值和当前周期-2的信号_b的值的按位and

信号随时间变化,所以当我运行这个

puts signal_a & signal_b  
advance_time
puts signal_a & signal_b
anded = signal_a & signal_b
puts added
advance_time
puts anded
我将在不同的时间获取值和

但是如果我运行这个

puts signal_a & signal_b  
advance_time
puts signal_a & signal_b
anded = signal_a & signal_b
puts added
advance_time
puts anded
我将打印相同的值

问题是我需要将信号的任意函数传递给其他对象,它们需要能够在任意时间获得这些函数的结果。

我知道如果你运行这个

anded = lambda { signal_a & signal_b }
puts anded.call
advance_time
puts anded.call
我将在不同的时间获得值AND,但是AND不是信号,所以我不能用它代替信号。 因此,例如,如果某个对象需要能够在某个任意时间点获得anded值,它就不能在循环中调用anded.value,因为anded是一个过程,而不是一个信号

我的第一个想法是使用类似复合模式的东西,创建一个CompositeLogicSignal类,该类实现LogicSignal类的所有方法,但通过调用获取子信号的proc来实现

所以我想要这样的东西

anded = CompositeLogicSignal.new [signal_a, signal_b] , lambda { |a,b| a & b }

有没有更简单的方法,或者有没有其他模式对这个问题更有意义?

有用吗?:)为什么不让
&
返回CompositeLogicSignal而不是LogicSignal?我以为你在寻找匿名对象。。。这就是为什么给出了链接。@iced我现在还没有一个CompositeLogicSignal类,&当前返回当时的anded值。按照您自己的建议创建Composite类并返回它。对于代码的其余部分来说,它看起来像普通的逻辑类,可以完成任务。