斯卡拉函数返回类型
问题描述:
我试图改变一个方法到一个函数,但我有跟返回类型的烦恼:斯卡拉函数返回类型
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)
答
你可以写
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
顺便说你的代码(忽略了一个事实,我不知道如何doDelete
看起来像)似乎工作,即使jobNotFoundFailure是String => CronJobFailure
。
cronJobsMap.get(name).fold(jobNotFoundFailure(name))(doDelete)
每当需要CronJobStatus
你可以把CronJobFailure
。无论何处需要功能A => CronJobStatus
A => CronJobFailure
也是有效的,因为Function1[-T, +R]
在返回值的类型中是协变的。
尝试了超过半个小时寻找语法,但找不到它。谢谢! :) – klogd