أفضل طريقة لاختبار قيمة الخيار؟
-
05-07-2019 - |
سؤال
كثيرا ما أجد نفسي مع Option[T]
لبعض النوع T
وترغب في اختبار قيمة الخيار مقابل بعض القيمة. فمثلا:
val opt = Some("oxbow")
if (opt.isDefined && opt.get == "lakes")
//do something
الرمز التالي مكافئ ويزيل متطلبات اختبار وجود من قيمة الخيار
if (opt.map(_ == "lakes").getOrElse(false))
//do something
لكن هذا يبدو أقل قابلية للقراءة بالنسبة لي. الاحتمالات الأخرى هي:
if (opt.filter(_ == "lakes").isDefined)
if (opt.find(_ == "lakes").isDefined) //uses implicit conversion to Iterable
لكنني لا أعتقد أن هؤلاء يعبرون بوضوح عن النية إما التي ستكون أفضل مثل:
if (opt.isDefinedAnd(_ == "lakes"))
هل حصل أي شخص على طريقة أفضل لإجراء هذا الاختبار؟
المحلول
ماذا عن
if (opt == Some("lakes"))
هذا يعبر عن القصد بوضوح وهو مستقيم للأمام.
نصائح أخرى
لـ Scala 2.11 ، يمكنك استخدام Some(foo).contains(bar)
Walter Chang FTW ، ولكن إليك بديل آخر محرج:
Some(2) exists (_ == 2)
val opt = Some("oxbow")
opt match {
case Some("lakes") => //Doing something
case _ => //If it doesn't match
}
يمكنك استخدام التفريغ أيضًا:
for {val v <- opt if v == "lakes"}
// do smth with v
أعتقد أنه يمكن أيضًا استخدام مطابقة الأنماط. بهذه الطريقة تقوم باستخراج القيمة المثيرة للاهتمام مباشرة:
val opt = Some("oxbow")
opt match {
case Some(value) => println(value) //Doing something
}
لا تنتمي إلى StackOverflow