繁体   English   中英

Scala函数返回类型

[英]Scala function return type

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

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 = (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]是返回值的类型协变。

你可以写

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM