1

这是一个求和函数,基本上它接受一个函数,并将它从任何a到任何求和。b

代码:

object sum {
  def sum(f: Double => Double, lower: Int, upper: Int): Double = {
    @tailrec
    def iter(acc: Double, lower: Int): Double = {
      if (lower > upper) acc
      else iter(acc + f(lower), lower + 1)
    }
    iter(0, lower)
  }

这是多少线程安全?
如果不是,有人可以提供有关如何做到这一点的信息吗?

4

1 回答 1

3

只要f是引用透明的,即没有副作用,它是完全线程安全的。

编辑

对于这样的代码或任何条件循环,您应该问的真正问题是“是否总能达到终止条件?” 产生的序列能否f(lower) + acc保证满足lower > upper?例如,如果我要为你提供一个单调递增的函数,upper而不是小于lower你将永远不会终止的函数。循环将是无限的。

于 2013-11-05T16:08:12.190 回答