scala स्कैला में या तो विकल्प का कन्वर्ट करें



type-conversion option (1)

मान लीजिए मुझे Option[Int] को Either[String, Int] स्कला में परिवर्तित करने की आवश्यकता है मैं इसे ऐसा करना चाहता हूं:

def foo(ox: Option[Int]): Either[String, Int] =
  ox.fold(Left("No number")) {x => Right(x)}

दुर्भाग्य से ऊपर दिए गए कोड संकलित नहीं होता है और मुझे स्पष्ट रूप से Either[String, Int] टाइप करने की आवश्यकता है:

  ox.fold(Left("No number"): Either[String, Int]) {x => Right(x)}

क्या इस प्रकार को जोड़ने के बिना Option को Either परिवर्तित करना संभव है?
आप Either Option बदलने का सुझाव कैसे देंगे?


नहीं, यदि आप ऐसा करते हैं, तो आप प्रकार को छोड़ नहीं सकते।

Left("No number") का प्रकार Either[String, Nothing] होने का अनुमान लगाया गया है बस Left("No number") से कंपाइलर नहीं जान सकता कि आप द्वितीय प्रकार का Int Either होना चाहते हैं, और टाइप इंफॉर्मेशन अब तक नहीं जाता है कि कंपाइलर पूरी पद्धति को देखेगा और यह तय करना चाहिए कि Either[String, Int]

आप इसे कई अलग-अलग तरीकों से कर सकते हैं पैटर्न मिलान के साथ उदाहरण के लिए:

def foo(ox: Option[Int]): Either[String, Int] = ox match {
  case Some(x) => Right(x)
  case None    => Left("No number")
}

या if अभिव्यक्ति के साथ:

def foo(ox: Option[Int]): Either[String, Int] =
  if (ox.isDefined) Right(ox.get) else Left("No number")

या या तो के साथ:

def foo(ox: Option[Int]): Either[String, Int] =
  Either.cond(ox.isDefined, ox.get, "No number")




either