add
成功的回报是什么?
目前我返回Unit
,是否有更惯用的方式?
我的意思是,Either[String, Unit]
感觉不对,因为Right
意味着返回一个值,因为它有一个类型参数。
该方法可能会失败或成功完成,但是当它成功完成时则无法返回,因此我只返回Right()
。我想知道描述这种情况的惯用方法是什么?
代表这种情况的好方法是什么?
import scala.collection.immutable.HashMap
import scala.concurrent.ExecutionContext
object UUID{
def apply():UUID= UUID(java.util.UUID.randomUUID().toString)
}
case class UUID(id:String) case class Ref[T](c:Class[T], id:UUID) {
override def equals(that:Any)=id.equals(that)
override def hashCode()=id.hashCode()
}
case class RefVal[T](r:Ref[T],v:T)
package container {
import scala.concurrent.Future
trait MapContainer[T] {
var map: HashMap[Ref[T], RefVal[T]] = HashMap[Ref[T], RefVal[T]]();
private[container] def add(rv: RefVal[T]): Future[Either[String, Unit]] = Future
{
if (!map.contains(rv.r)) {
map = map updated(rv.r, rv)
Right()
} else Left("add, class already exists with this uuid :" + rv.r.c)
}
private[container] def notExposed=println("cannot run this from outside package 'model'")
def delete(r:Ref[T]) : Future[Either[String,Unit]]= Future {
if (map.contains(r))
{
map = map - r
Right()
}
else Left(r+"element not found")
}
...
}
答案 0 :(得分:1)
我认为更惯用的方式是:
顺便说一句,你可以使用codereview.stackexchange来代码审查需要:)
编辑:正如@massg指出的那样,此时,Try [Map]正好具有[Throwable,Map]的语义,并且确实更适合