ZIO中的类型推断,给出Any in以便理解



所以我写了一个方法来计算ZIO文件中的行数。

def lines(file: String): Task[Long] = {
def countLines(reader: BufferedReader): Task[Long] = Task.effect(reader.lines().count())
def releaseReader(reader: BufferedReader): UIO[Unit] = Task.effectTotal(reader.close())
def acquireReader(file: String): Task[BufferedReader] = Task.effect(new BufferedReader(new FileReader(file), 2048))
Task.bracket(acquireReader(file), releaseReader, countLines)
}

现在在我的run方法中,当我尝试像这样提取结果时:

for {
lines <- linesV3("src/main/scala/FileIO.scala") //Type of lines showing as Any
_ <- putStrLn(lines.toString) //This line throws error as it cannot convert Any to String
}

行类型为Any而不是Long。为什么会这样呢?如果我使用flatMap,那么类型将被正确推断。

你贴在这里的代码没有问题。问题一定是由程序中的其他地方引起的。也许你错过了理解后的收获。我不知道这是不是一个复制错误。

所以解决方案非常相似。只要在for推导式之后添加yield,类型推断就开始正常工作

for {
lines <- linesV3("src/main/scala/FileIO.scala")
_ <- putStrLn(lines.toString)
} yield ()

toString方法是必需的,因为putStrLn只接受String参数。

相关内容

  • 没有找到相关文章

最新更新