【发布时间】:2018-04-04 18:11:29
【问题描述】:
我想对选项转换进行平面映射,同时了解转换“退出”的位置(即首次返回 None 的位置)。
一些示例代码:
val stringFetcher : DomainObject=>Option[String] = ...
val filterer : String=>Option[String] = ...
val reportFilteredCause: DomainObject => String = do =>
{
val strOption = stringFetcher(do)
val filterReasonOption = strOption flatMap filterer
filterReasonOption.getOrElse("Failed to fetch string representation OR field not filtered")
}
理想情况下,我想写一些类似下面的东西,我传入一些与每个选项转换相关的报告字符串:
val stringFetcher : DomainObject=>Option[String] = ...
val filterer : String=>Option[String] = ...
val reportFilteredCause: DomainObject => String = do =>
{
val strOption : Either[Option[String], String]] = EitherWrapper stringFetcher(do) "Failed to fetch string representation"
val filterReasonOption = strOption flatMapWrapper filterer "Failed to filter field
filterReasonOption
}
【问题讨论】:
-
stringFetcher和getStringRepr是什么关系?看起来他们做同样的事情。为什么一个已定义但未使用,而另一个已使用但未定义? -
stringFetcher和filterer只是我想要应用到DomainObject的两个操作(按它们各自的顺序!)。我用...代替了定义——它们都应该被使用和定义 -
重新阅读我的问题(和您的代码)。为什么
stringFetcher定义但从未使用过?为什么代码中使用了getStringRepr,却没有定义? -
已修复;)谢谢
标签: scala functional-programming optional either