Scala 函数 return 类型
Scala function return type
我正在尝试将方法更改为函数,但我遇到了 return 类型的问题:
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 作为一个函数时,我无法找到正确的语法来指定它 returns 一个 CronJobStatus,我有这个函数(但它 returns CronJobFailure)
val jobNotFoundFailure = (name: String) => CronJobFailure(Some(s"Job with name $name not found"))
这意味着我无法在需要 CronJobStatus 的地方使用此功能。例如从地图中获取 Opt 并折叠时:
cronJobsMap.get(name).fold(jobNotFoundFailure(name))(doDelete)
你可以写
val jobNotFoundFailure: String => CronJobStatus =
name => CronJobFailure(Some(s"Job with name $name not found"))
另一种可能的选择是:
val jobNotFoundFailure = (name: String) =>
CronJobFailure(Some(s"Job with name $name not found")): CronJobStatus
顺便说一下,即使 jobNotFoundFailure 是 String => CronJobFailure
.
,您的代码(忽略我不知道 doDelete
是什么样子的事实)似乎也能正常工作
cronJobsMap.get(name).fold(jobNotFoundFailure(name))(doDelete)
每当需要 CronJobStatus
时,您可以输入 CronJobFailure
。在需要函数 A => CronJobStatus
的地方,A => CronJobFailure
也是有效的,因为 Function1[-T, +R]
在返回值的类型上是协变的。
我正在尝试将方法更改为函数,但我遇到了 return 类型的问题:
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 作为一个函数时,我无法找到正确的语法来指定它 returns 一个 CronJobStatus,我有这个函数(但它 returns CronJobFailure)
val jobNotFoundFailure = (name: String) => CronJobFailure(Some(s"Job with name $name not found"))
这意味着我无法在需要 CronJobStatus 的地方使用此功能。例如从地图中获取 Opt 并折叠时:
cronJobsMap.get(name).fold(jobNotFoundFailure(name))(doDelete)
你可以写
val jobNotFoundFailure: String => CronJobStatus =
name => CronJobFailure(Some(s"Job with name $name not found"))
另一种可能的选择是:
val jobNotFoundFailure = (name: String) =>
CronJobFailure(Some(s"Job with name $name not found")): CronJobStatus
顺便说一下,即使 jobNotFoundFailure 是 String => CronJobFailure
.
doDelete
是什么样子的事实)似乎也能正常工作
cronJobsMap.get(name).fold(jobNotFoundFailure(name))(doDelete)
每当需要 CronJobStatus
时,您可以输入 CronJobFailure
。在需要函数 A => CronJobStatus
的地方,A => CronJobFailure
也是有效的,因为 Function1[-T, +R]
在返回值的类型上是协变的。