Scala函数返回类型

时间:2016-03-04 11:37:27

标签: scala function traits

我正在尝试将方法更改为函数,但是我遇到了返回类型的问题:

sealed trait CronJobStatus
case object CronJobSuccess extends CronJobStatus
case class CronJobFailure(error: Option[String] = None) extends CronJobStatus

我的方法(有效)是:

def jobNotFoundFailure(name: String): CronJobStatus = CronJobFailure(Some(s"Job with name $name not found"))

当尝试将jobNotFoundFailure作为函数时,我无法找到正确的语法来指定它返回一个CronJobStatus,我有这个函数(但它返回CronJobFailure)

val jobNotFoundFailure = (name: String) => CronJobFailure(Some(s"Job with name $name not found"))

这意味着我无法在需要CronJobStatus的地方使用此功能。例如从地图中获取选项并折叠时:

cronJobsMap.get(name).fold(jobNotFoundFailure(name))(doDelete)

2 个答案:

答案 0 :(得分:2)

另一种可能的选择是:

val jobNotFoundFailure = (name: String) =>
  CronJobFailure(Some(s"Job with name $name not found")): CronJobStatus

顺便说一下,即使jobNotFoundFailure为doDelete,您的代码(忽略我不知道String => CronJobFailure如何看似的事实)似乎也能正常工作。

cronJobsMap.get(name).fold(jobNotFoundFailure(name))(doDelete)

每当需要CronJobStatus时,您可以CronJobFailure。只要需要A => CronJobStatus函数,A => CronJobFailure也是有效的,因为Function1[-T, +R]在返回值的类型中是协变的。

答案 1 :(得分:1)

你可以写

val jobNotFoundFailure: String => CronJobStatus =
  name => CronJobFailure(Some(s"Job with name $name not found"))