当输入的数据格式不正确时,ActivityData 中会出现 OutofIndex 错误,但更多的时候我们只关心想要的结果而不想了解出现了怎样的错误,然后会写出这样的代码
def
parseCSV(csv
:
String)
=
{
try
{
Some {
csv.split(
"
"
).map { line
=
>
val
tokens
=
line.split(
";"
)
ActivityData(tokens(
0
).toLong, tokens(
1
).toInt, tokens(
2
).toInt, tokens(
3
).toLong)
}
}
}
catch
{
case
_
:
Throwable
=
> None
}
}
而 import scala.util.Try 后,我们可以写出这样的代码
def
parseCSV(csv
:
String)
=
Try {
csv.split(
"
"
).map { line
=
>
val
tokens
=
line.split(
";"
)
ActivityData(tokens(
0
).toLong, tokens(
1
).toInt, tokens(
2
).toInt, tokens(
3
).toLong)
}
}
就像 Option 一样,Try 有 success 和 fail 两种可能性,而且用法也和 Option 类型
parseCSV(csvdata).map { entries
=
>
//do something with the data
}.getOrElse {
BadRequest(
"Invalid CSV Data"
)
//this is Play Framework specific (returns a 400 HTTP response with a message)
}
我们能这么做的原因是 Try 是 monad,当一切正常时,它返回 Success(something), 失败时返回 Failure(error)