Я новичок ie в scala. И я понимаю, что scala не рекомендуется использовать try, catch, finally block. Скорее это продвигает типы Option
, Try
и Either`.
Я хочу понять, как правильно их использовать в следующем случае.
Функция для чтения файла свойств
def getSourcePath(properties: Properties): Path = {
val dataFileURI: String = properties.getProperty("dataFileURI")
val srcPath = new Path(dataFileURI)
srcPath
}
Функция, которая использует значение из getSourcePath
val srcPath = getSourcePath(properties)
def getDataFileName(srcPath: Path, auditID: String): String = {
val dataFileName: String = srcPath.getName + "_" + auditID
dataFileName
}
GetSourcePath, который возвращает Either
def getSourcePath(properties: Properties): Either[FileSystemError, Path] = {
try{
val dataFileURI: String = properties.getProperty("dataFileURI")
val srcPath = new Path(dataFileURI)
Right(srcPath)
}catch{
case exception: Exception => Left(FileSystemError("Not able to get dataFileURI"))
}
getDataFileName для использования Either.
def getDataFileName(srcPath: Either[FileSystemError, Path], auditID: String): Either[FileSystemError, String] = {
srcPath match {
case Right(srcPath) => Right(srcPath.getName + "_" + auditID)
case Left(srcPath) => Left(srcPath)
}
}
Однако, это похоже на передачу исключения далее в методах. И выполнение сопоставления с шаблоном для каждого аргумента выглядит излишним, если у меня есть 3-4 аргумента.
Похоже, я не до конца понимаю эти типы.