को देखते हुए:साफ़ `मामले से class`` Option` क्षेत्रों
case class Foo(a: Option[Int], b: Option[Int], c: Option[Int], d: Option[Int])
मैं केवल निर्माण अनुमति देना चाहते हैं एक Foo
केवल अगर अपने तर्कों का कम से कम एक Some
, यानी नहीं सभी क्षेत्रों है None
हैं।
यह प्रत्येक संस्करण के लिए एक बीजीय डेटा प्रकार लिखना, और फिर बनाने के लिए उप-वर्गों काफी कोड का एक सा होगा:
sealed trait Foo
case class HasAOnly(a: Int) extends Foo
case class HasAB(a: Int, b: Int) extends Foo
// etc...
वहाँ एक क्लीनर, यानी कम कोड, मेरी समस्या का समाधान करने और रास्ता नहीं है shapeless
का उपयोग कर?