我正在尝试将给定的字符串写入SCALA中的新文件。
我已导入
java.io._
java.nio._
这是我的代码:
implicit class PathImplicits(p: Path) {
def write(str:String, file:String):Path = Paths.get(file)
p.write(str,file)
}
然而,编译说它无法识别'文件'变量。
答案 0 :(得分:0)
首先,你在功能周围缺少一对括号。我想,你打算看起来像这样:
def write(str:String, file:String):Path = {
Paths.get(file)
p.write(str,file)
}
它看起来像,因为str
和file
是函数的参数,并且你试图在它之外使用它们(没有大括号的函数体只是一个语句)。
现在,我和#34;修复了#34;它适合你,仍然没有多大意义。
首先,Paths.get(file)
没有做任何事情,它只返回Path
对象,你没有分配给任何东西,所以,这个调用没有任何效果。其次,Path
没有名为write
的方法,因此第二行不会起作用。也许,你打算隐含地结束调用PathImplicits.write
,但这不会起作用(你不得不在那个班级之外),这是件好事,因为你实际上在该函数中,并且,如果该行再次调用它,您将进入无限递归。
让我们将您的问题分成两部分。首先,让我们忘记implicits和其他花哨的东西,然后弄清楚如何将字符串写入文件。有很多不同的方法可以做到这一点。例如,这是一个:
def writeToFile(file: File, str: String): Unit = {
val writer = new FileWriter(file)
try { writer.append(str).append("\n") }
finally { writer.close }
}
现在,如果您想隐含地使用Path
,那么您需要这样的内容:
object PathImplicits {
implicit class RichPath(p: Path) extends AnyVal {
def write(str: String) = writeToFile(p.toFile, str)
}
}
那就是它。现在,你应该可以这样写:
import PathImplicits._
Paths.get("/some/path/to/file.txt").write("Foo!")