我有一个检查软件缓冲区数据的功能,但如果该数据没有改变,它仍然会被添加和发送。
所以我最终会多次发送数据。 我试图查看我的变量是否已更改,如果不是,我想阻止它再次发送该数据。
这是我尝试过的。
$buffer = fldigi.add_to_buffer(msg)
if $buffer
fldigi.send_buffer()
else
puts "Debug(buffer): Data has not changed"
end
答案 0 :(得分:1)
您可以尝试在对象中包装$buffer
,然后关注Observer Pattern。对$buffer
的任何更改都必须通过包装器对象的方法。然后,观察者可以订阅$buffer
包装器发出的更改通知事件,并采取相应的行动,例如fldigi.send_buffer()
。
答案 1 :(得分:0)
在没有跟踪程序执行的情况下,无法知道变量是否已更改。变量不是Ruby中的对象,你不能告诉他们做某事,你不能问他们问题,你不能把它们作为参数传递,你不能把它们作为值返回,你不能分配它们对于变量,你不能在它们上调用方法。
你可以用变量做两件事:取消引用并分配给它。
分配是更改变量的唯一方法,因此您需要跟踪变量的分配以确定变量是否已更改。但请注意,标准的Ruby TracePoint
API不提供必要的信息(可能是因为变量可能会被编译器优化掉)。
检查某个对象是否已更改而不是某个变量是否已更改可能要容易得多。
答案 2 :(得分:-1)
prev_val = nil
loop do
new_val = fldigi.add_to_buffer(msg)
if new_val == prev_val
puts "Debug(buffer): Data has not changed"
else
fldigi.send_buffer()
end
prev_val = new_val
end