KAY*_*YAK 4 random functional-programming scala
好的,我想生成临时文件名。所以,我创建了一个类变种tempFileName,并fileNo使得它创建类似文件
BSirCN_0.txt
BSirCN_1.txt
BSirCN_2.txt
Run Code Online (Sandbox Code Playgroud)
但是,要做到这一点,我必须保持计数,并且要按照这种方式来调用next()类的函数,该函数按顺序返回文件名(BSirCN_4在上述情况下应该返回。现在,这与FP背道而驰,因为我正在修改状态,即对象中名称的计数。我该如何以一种功能的方式来实现。我能想到的一种方法是保持对调用函数并连接处的计数。还有其他方法吗?
只需返回一个新对象:
case class FileGenerator(tempFileName: String, fileNo: Long = 0) {
lazy val currentFileName = tempFileName + "_" + fileNo
lazy val next = FileGenerator(tempFileName, fileNo + 1)
}
Run Code Online (Sandbox Code Playgroud)
然后,您可以执行以下操作:
val generator = FileGenerator("BSirCN")
val first = generator.currentFileName
val next = generator.next.currentFileName
Run Code Online (Sandbox Code Playgroud)
您可以使用Iterator (或任何其他类型的无限和惰性集合)来避免突变。
final class TempFileNamesGenerator(prefix: String) {
private[this] val generator =
Iterator
.from(start = 0)
.map(i => s"${prefix}_${i}.txt")
def next(): String =
generator.next()
}
val generator = new TempFileNamesGenerator(prefix = "BSirCN")
generator.next() // BSirCN_0.txt
generator.next() // BSirCN_1.txt
generator.next() // BSirCN_2.txt
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
107 次 |
| 最近记录: |