0

我有两个类变量@ticks@dings,我想从 开始1

其他功能偶尔会增加各种数量@ticks,并且@dings会随着1每次@ticks达到或超过 (@dings * 100) + (@dings * 10)而增加。

我想dings += (number of times met or surpassed)在任何导致@ticks达到或超过(@dings * 100) + (@dings * 10)一次或多次当前值的操作后立即执行。

这是一个合适的解决方案吗?

def increment_ticks
  while @ticks >= (@dings*100) + (@dings*10)
  @dings += 1
  end
end

我只是increment_ticks每次都调用@ticks添加到(或添加到添加increment_ticks到的所有函数中的适当位置@ticks)。

4

2 回答 2

6

由于与除以 110 向下舍入@dings相同,因此最简单的方法是根本不增加,而是每次你想要它时简单地计算它。@ticks@dings

您的类可以有一个dings()方法返回@ticks除以 110 的数量。

于 2013-06-24T05:39:46.360 回答
0

由于 dings 和 ticks 是严格相关的,因此您应该创建一个存储 dings 和 ticks 的类。

@ticks该解决方案的重点是为和变量添加额外级别的数据保护,@dings以强制使用increment_ticks其类A提供的方法。这样你就可以确定@dings变量总是一致的。

这是一个例子:

class A 

    def initialize( x = 0 )
        @ticks = x
        @dings = 0
    end

    def increment_ticks( a )
        @ticks += a
        @dings += 1 if @ticks >= (@dings*100) + (@dings*10)
    end

    def ticks; @ticks; end
    def dings; @dings; end

end

您面临的问题如下:您有一个变量 ( @ticks),它被多个其他函数修改,但您想更新另一个变量 ( ) 的值,该变量 ( @dings) 与第一个变量 ( ) 严格相关@ticks

您可以通过减轻主类并创建适当的类来处理此逻辑来解决此问题(如上所示)。

当你初始化类时,你可以给出起始的刻度数。只能通过调用来修改刻度数increment_ticks(这是此解决方案的关键点),因此您可以确定每次@ticks递增,即:

@dings += 1 if @ticks >= (@dings*100) + (@dings*10)

调用检查。

在您的主类中,您可以轻松实例化:

@a = A.new( 0 )

然后调用:

@a.increment_ticks( 123 )

在每个需要增加刻度的函数中。最后,您可以通过以下方式检索它们的值:

@a.ticks
@a.dings
于 2013-06-24T05:32:10.380 回答