gpt4 book ai didi

scala - 这是 Scala 中的纯函数吗

转载 作者:行者123 更新时间:2023-12-04 17:18:38 26 4
gpt4 key购买 nike

以下功能 getRandomString从字符列表生成随机字符串:

  def genRandomInt(lb: Int, ub: Int) = {
val rnd = new scala.util.Random
lb + rnd.nextInt(ub)
}
def getRandomString(validChars: List[Char]) = {

val size = validChars.size

val random = new scala.util.Random
val stringBuilder = new StringBuilder
val rnd = genRandomInt(0, size)
val sb = new StringBuilder

for (i <- 0 to size - 1) {
val rnd = genRandomInt(0, size)
sb.append(validChars(rnd))
}

sb.toString
} //> getRandomString: (validChars: List[Char])String

val rs = getRandomString(('a' to 'j').toList)
//> rs : String = aghdjjhjge

getRandomString纯函数的一个例子,因为它不修改状态?

最佳答案

不,因为它实际上确实修改了状态。 new scala.util.Random最终调用 new java.util.Random ,它访问和修改静态(即全局)、可变的 AtomicLongseedUniquifier .因此,如果多次调用此方法,则结果将发生变化。

这是一个很好的例子,说明看似无辜的方法如何隐藏对全局可变状态的访问,这在像 Haskell 这样更严格的函数式语言中是被禁止的(尽管这种方法有其自身的问题)。

关于scala - 这是 Scala 中的纯函数吗,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27569041/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com