add
에서 성공하면 무엇을 반환할까요?[String, Unit] - 관용적입니까? 이것에 대해 더 관용적 인 유형이 있습니까?
현재 나는 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")
}
...
}
논쟁의 요점이지만, 저는 이것을 모델링합니다. 'Future [Unit]'로 실패 사례에 대한 응용 프로그램 예외로 미래에 실패했습니다. – maasg
도 참조하십시오 : http://stackoverflow.com/questions/40283042/futureeitherapperror-optionuser-in-scala/40284496#40284496 – maasg
@maasg 최근에 [미래] [Unit]'https://lustforge.com/2016에 대해 읽었습니다./04/12/future-unit-and-stupid-scala-tricks/ – jhegedus