在Scala

时间:2016-04-11 13:29:48

标签: scala

我正在尝试将给定的字符串写入SCALA中的新文件。

我已导入

java.io._
java.nio._

这是我的代码:

implicit class PathImplicits(p: Path) {
     def write(str:String, file:String):Path = Paths.get(file)
     p.write(str,file)
    }

然而,编译说它无法识别'文件'变量。

1 个答案:

答案 0 :(得分:0)

首先,你在功能周围缺少一对括号。我想,你打算看起来像这样:

 def write(str:String, file:String):Path = { 
   Paths.get(file)
   p.write(str,file)
 }

它看起来像,因为strfile是函数的参数,并且你试图在它之外使用它们(没有大括号的函数体只是一个语句)。

现在,我和#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!")