Scala - Datei löschen, falls vorhanden, der Scala Weg
Wie schön löschen, Datei in Scala", "Scala Weg"?
Kann ich beispielsweise so etwas wie dieses, sehr Java Stil:
private def deleteFile(path: String) = {
val fileTemp = new File(path)
if (fileTemp.exists) {
fileTemp.delete()
}
}
Wie würde es umgesetzt werden, in der Scala, in ein mehr funktionale syntax?
Du musst angemeldet sein, um einen Kommentar abzugeben.
Können Sie nicht loswerden, Nebenwirkungen, während Sie
IO
-Operationen, so dass keine guten funktionellen Möglichkeiten hier. Alle Funktions-Zeug ist eigentlich zu Ende, wenn Sie beginnen, Interaktion mit Benutzer/Geräte direkt, keine Monade kann Ihnen helfen, zu tun, einen externen side-Effekt, aber Sie können beschreiben (wrap) sequentielle Nebenwirkungen mit IO-wie Monaden.Sprechen über Ihre Beispiel die Monade-restyled-code kann wie folgt Aussehen:
Aber das ist zu ausführlich, ohne wirkliche Vorteile, wenn Sie nur möchten, löschen Sie eine Datei. Mehr als das,
fileTemp.exists
- check hat keinen Sinn und ist eigentlich nicht zuverlässig (wie @Eduardo hingewiesen). Also, auch in Scala der beste Weg, ich weiß, ist FileUtils.deleteQuietly:Oder sogar
Es nicht eine Ausnahme für nicht-existente Datei - nur zurück
false
.Wenn Sie wirklich wollen, etwas mehr Scala-Weg - Blick auf Verzückung.io zum Beispiel:
Oder scala-io.
Mehr info: Wie zu tun, Datei-Erstellung und manipulation im funktionalen Stil?
P. S. Aber IO-Monaden nützlich sein könnten (im Gegensatz zu Einigen/Keine in meinem Fall), wenn Sie verlangen, asynchrone Operationen, so naiv code (ohne Katzen/scalaz) würde wie folgt Aussehen:
Natürlich, in der realen Welt, es ist am besten, um einige NIO-Wrapper wie FS2-io: https://lunatech.com/blog/WCl5OikAAIrvQCoc/functional-io-with-fs2-streams
None
dann, das ist richtig 🙂Monad
-Stil hier (flatMap), nicht nurFunctor
(Karte). Im ernst, die ähnliche check-in OP ' s Frage hat auch keinen Sinn - ich habe nur übersetzt, es zu monadischen.Files.deleteIfExists(file.toPath)
oderFiles.deleteIfExists(Paths.get("path/to/file"))