我有一个名为LogicSignal
我有一套方法和"运算符"我可以调用这些实例的方法,例如
anded = signal_a & signal_b.value_at_cycle_n_minus(2)
将在当前时间给出signal_a的按位和值以及当前周期的signal_b的值 - 2.
信号随时间变化,所以当我运行时
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
我会在不同时间得到值,但anded
不是信号,所以我不能用它来代替信号。
因此,例如,如果某个对象需要能够在某个任意时间点获取anded
值,则无法调用anded.value_at_cycle_n_minus(),因为anded
是一个proc而不是一个信号< / p>
我的第一个想法是使用类似复合模式的东西,并创建一个CompositeLogicSignal类,它实现LogicSignal类的所有方法,但是通过调用带有子信号的proc来实现。
所以我会有类似的东西
anded = CompositeLogicSignal.new [signal_a, signal_b] , lambda { |a,b| a & b }
是否有更简单的方法,还是有其他一些模式可以解决这个问题?