{"id":2581,"date":"2015-09-12T01:41:49","date_gmt":"2015-09-12T01:41:49","guid":{"rendered":"http:\/\/www.garysieling.com\/blog\/?p=2581"},"modified":"2015-09-12T01:41:49","modified_gmt":"2015-09-12T01:41:49","slug":"scala-case-example","status":"publish","type":"post","link":"https:\/\/www.garysieling.com\/blog\/scala-case-example\/","title":{"rendered":"Scala case example"},"content":{"rendered":"<p>&#8220;Case&#8221; is used very frequently in Scala, as it is much more useful than other languages.<\/p>\n<p>For instance, you might wish to make a lambda that is defined only some of the time. This is convenient for writing tools to do ETL or scraping, where you don&#8217;t know how to handle some value, and aren&#8217;t sure if it will ever actually occur &#8211; you&#8217;ve defined that you know it could exist, but without actually handling it:<\/p>\n<pre lang=\"scala\">\nval y = (x: Int) => { \n  x match { \n     case 1 => \"test\" \n     case 2 => ???\n     case _ => ??? \n  } \n}\n<\/pre>\n<p>This is what the output looks like:<\/p>\n<pre>\ny: Int => String = <function1>\n\nscala> y(1)\nres8: String = test\n\nscala> y(2)\nscala.NotImplementedError: an implementation is missing\n  at scala.Predef$.$qmark$qmark$qmark(Predef.scala:225)\n  at $anonfun$1.apply(<console>:8)\n  at $anonfun$1.apply(<console>:8)\n  ... 33 elided\n\nscala> y(3)\nscala.NotImplementedError: an implementation is missing\n  at scala.Predef$.$qmark$qmark$qmark(Predef.scala:225)\n  at $anonfun$1.apply(<console>:8)\n  at $anonfun$1.apply(<console>:8)\n  ... 33 elided\n<\/pre>\n<p>Note how the ??? is actually a special operator, which causes &#8220;NotImplementedError&#8221; for &#8220;any&#8221; value (the _ matches whatever is left). <\/p>\n<p>Case can match on types:<\/p>\n<pre lang=\"Scala\">\n1 match { case _: Int => \"int\" }\n\nres18: String = int\n<\/pre>\n<p>And on regexes:<\/p>\n<pre lang=\"Scala\">\nval pattern = \"(\\\\d*)\".r\n\"1\" match { case pattern(x) => \"int\" }\n\nres31: String = int\n<\/pre>\n<p>The most common use case for &#8220;case&#8221; is unpacking lists of values. Usually these are &#8220;case classes&#8221;, which are similar to the concept of dictionary entries or enumeration types (except that a case class can hold data, like &#8220;Some&#8221; here holding a 1):<\/p>\n<pre lang=\"scala\">\nSome(1)\n  match { \n    case Some(x) => x \n    case _ => \"nothing\" \n  }\n\nres37: Any = 1\n<\/pre>\n","protected":false},"excerpt":{"rendered":"<p>&#8220;Case&#8221; is used very frequently in Scala, as it is much more useful than other languages. For instance, you might wish to make a lambda that is defined only some of the time. This is convenient for writing tools to do ETL or scraping, where you don&#8217;t know how to handle some value, and aren&#8217;t &hellip; <\/p>\n<p class=\"link-more\"><a href=\"https:\/\/www.garysieling.com\/blog\/scala-case-example\/\" class=\"more-link\">Continue reading<span class=\"screen-reader-text\"> &#8220;Scala case example&#8221;<\/span><\/a><\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"om_disable_all_campaigns":false,"_monsterinsights_skip_tracking":false,"footnotes":""},"categories":[4],"tags":[480,488],"aioseo_notices":[],"aioseo_head":"\n\t\t<!-- All in One SEO 4.9.9 - aioseo.com -->\n\t<meta name=\"description\" content=\"&quot;Case&quot; is used very frequently in Scala, as it is much more useful than other languages. For instance, you might wish to make a lambda that is defined only some of the time. This is convenient for writing tools to do ETL or scraping, where you don&#039;t know how to handle some value, and aren&#039;t\" \/>\n\t<meta name=\"robots\" content=\"max-image-preview:large\" \/>\n\t<meta name=\"author\" content=\"gary\"\/>\n\t<link rel=\"canonical\" href=\"https:\/\/www.garysieling.com\/blog\/scala-case-example\/\" \/>\n\t<meta name=\"generator\" content=\"All in One SEO (AIOSEO) 4.9.9\" \/>\n\t\t<meta property=\"og:locale\" content=\"en_US\" \/>\n\t\t<meta property=\"og:site_name\" content=\"Gary Sieling - Software Engineer\" \/>\n\t\t<meta property=\"og:type\" content=\"article\" \/>\n\t\t<meta property=\"og:title\" content=\"Scala case example - Gary Sieling\" \/>\n\t\t<meta property=\"og:description\" content=\"&quot;Case&quot; is used very frequently in Scala, as it is much more useful than other languages. For instance, you might wish to make a lambda that is defined only some of the time. This is convenient for writing tools to do ETL or scraping, where you don&#039;t know how to handle some value, and aren&#039;t\" \/>\n\t\t<meta property=\"og:url\" content=\"https:\/\/www.garysieling.com\/blog\/scala-case-example\/\" \/>\n\t\t<meta property=\"article:published_time\" content=\"2015-09-12T01:41:49+00:00\" \/>\n\t\t<meta property=\"article:modified_time\" content=\"2015-09-12T01:41:49+00:00\" \/>\n\t\t<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n\t\t<meta name=\"twitter:title\" content=\"Scala case example - Gary Sieling\" \/>\n\t\t<meta name=\"twitter:description\" content=\"&quot;Case&quot; is used very frequently in Scala, as it is much more useful than other languages. For instance, you might wish to make a lambda that is defined only some of the time. This is convenient for writing tools to do ETL or scraping, where you don&#039;t know how to handle some value, and aren&#039;t\" \/>\n\t\t<script type=\"application\/ld+json\" class=\"aioseo-schema\">\n\t\t\t{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"BlogPosting\",\"@id\":\"https:\\\/\\\/www.garysieling.com\\\/blog\\\/scala-case-example\\\/#blogposting\",\"name\":\"Scala case example - Gary Sieling\",\"headline\":\"Scala case example\",\"author\":{\"@id\":\"https:\\\/\\\/www.garysieling.com\\\/blog\\\/author\\\/gary\\\/#author\"},\"publisher\":{\"@id\":\"https:\\\/\\\/www.garysieling.com\\\/blog\\\/#organization\"},\"datePublished\":\"2015-09-12T01:41:49+00:00\",\"dateModified\":\"2015-09-12T01:41:49+00:00\",\"inLanguage\":\"en-US\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/www.garysieling.com\\\/blog\\\/scala-case-example\\\/#webpage\"},\"isPartOf\":{\"@id\":\"https:\\\/\\\/www.garysieling.com\\\/blog\\\/scala-case-example\\\/#webpage\"},\"articleSection\":\"Code Examples, scala, scala-reference\"},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/www.garysieling.com\\\/blog\\\/scala-case-example\\\/#breadcrumblist\",\"itemListElement\":[{\"@type\":\"ListItem\",\"@id\":\"https:\\\/\\\/www.garysieling.com\\\/blog#listItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\\\/\\\/www.garysieling.com\\\/blog\",\"nextItem\":{\"@type\":\"ListItem\",\"@id\":\"https:\\\/\\\/www.garysieling.com\\\/blog\\\/category\\\/code-examples\\\/#listItem\",\"name\":\"Code Examples\"}},{\"@type\":\"ListItem\",\"@id\":\"https:\\\/\\\/www.garysieling.com\\\/blog\\\/category\\\/code-examples\\\/#listItem\",\"position\":2,\"name\":\"Code Examples\",\"item\":\"https:\\\/\\\/www.garysieling.com\\\/blog\\\/category\\\/code-examples\\\/\",\"nextItem\":{\"@type\":\"ListItem\",\"@id\":\"https:\\\/\\\/www.garysieling.com\\\/blog\\\/scala-case-example\\\/#listItem\",\"name\":\"Scala case example\"},\"previousItem\":{\"@type\":\"ListItem\",\"@id\":\"https:\\\/\\\/www.garysieling.com\\\/blog#listItem\",\"name\":\"Home\"}},{\"@type\":\"ListItem\",\"@id\":\"https:\\\/\\\/www.garysieling.com\\\/blog\\\/scala-case-example\\\/#listItem\",\"position\":3,\"name\":\"Scala case example\",\"previousItem\":{\"@type\":\"ListItem\",\"@id\":\"https:\\\/\\\/www.garysieling.com\\\/blog\\\/category\\\/code-examples\\\/#listItem\",\"name\":\"Code Examples\"}}]},{\"@type\":\"Organization\",\"@id\":\"https:\\\/\\\/www.garysieling.com\\\/blog\\\/#organization\",\"name\":\"Gary Sieling\",\"description\":\"Software Engineer\",\"url\":\"https:\\\/\\\/www.garysieling.com\\\/blog\\\/\"},{\"@type\":\"Person\",\"@id\":\"https:\\\/\\\/www.garysieling.com\\\/blog\\\/author\\\/gary\\\/#author\",\"url\":\"https:\\\/\\\/www.garysieling.com\\\/blog\\\/author\\\/gary\\\/\",\"name\":\"gary\",\"image\":{\"@type\":\"ImageObject\",\"@id\":\"https:\\\/\\\/www.garysieling.com\\\/blog\\\/scala-case-example\\\/#authorImage\",\"url\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/0be925276d848ffe98a6a9dc8cf33e67?s=96&d=identicon&r=g\",\"width\":96,\"height\":96,\"caption\":\"gary\"}},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/www.garysieling.com\\\/blog\\\/scala-case-example\\\/#webpage\",\"url\":\"https:\\\/\\\/www.garysieling.com\\\/blog\\\/scala-case-example\\\/\",\"name\":\"Scala case example - Gary Sieling\",\"description\":\"\\\"Case\\\" is used very frequently in Scala, as it is much more useful than other languages. For instance, you might wish to make a lambda that is defined only some of the time. This is convenient for writing tools to do ETL or scraping, where you don't know how to handle some value, and aren't\",\"inLanguage\":\"en-US\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/www.garysieling.com\\\/blog\\\/#website\"},\"breadcrumb\":{\"@id\":\"https:\\\/\\\/www.garysieling.com\\\/blog\\\/scala-case-example\\\/#breadcrumblist\"},\"author\":{\"@id\":\"https:\\\/\\\/www.garysieling.com\\\/blog\\\/author\\\/gary\\\/#author\"},\"creator\":{\"@id\":\"https:\\\/\\\/www.garysieling.com\\\/blog\\\/author\\\/gary\\\/#author\"},\"datePublished\":\"2015-09-12T01:41:49+00:00\",\"dateModified\":\"2015-09-12T01:41:49+00:00\"},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/www.garysieling.com\\\/blog\\\/#website\",\"url\":\"https:\\\/\\\/www.garysieling.com\\\/blog\\\/\",\"name\":\"Gary Sieling\",\"description\":\"Software Engineer\",\"inLanguage\":\"en-US\",\"publisher\":{\"@id\":\"https:\\\/\\\/www.garysieling.com\\\/blog\\\/#organization\"}}]}\n\t\t<\/script>\n\t\t<!-- All in One SEO -->\n\n","aioseo_head_json":{"title":"Scala case example - Gary Sieling","description":"\"Case\" is used very frequently in Scala, as it is much more useful than other languages. For instance, you might wish to make a lambda that is defined only some of the time. This is convenient for writing tools to do ETL or scraping, where you don't know how to handle some value, and aren't","canonical_url":"https:\/\/www.garysieling.com\/blog\/scala-case-example\/","robots":"max-image-preview:large","keywords":"","webmasterTools":{"miscellaneous":""},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"BlogPosting","@id":"https:\/\/www.garysieling.com\/blog\/scala-case-example\/#blogposting","name":"Scala case example - Gary Sieling","headline":"Scala case example","author":{"@id":"https:\/\/www.garysieling.com\/blog\/author\/gary\/#author"},"publisher":{"@id":"https:\/\/www.garysieling.com\/blog\/#organization"},"datePublished":"2015-09-12T01:41:49+00:00","dateModified":"2015-09-12T01:41:49+00:00","inLanguage":"en-US","mainEntityOfPage":{"@id":"https:\/\/www.garysieling.com\/blog\/scala-case-example\/#webpage"},"isPartOf":{"@id":"https:\/\/www.garysieling.com\/blog\/scala-case-example\/#webpage"},"articleSection":"Code Examples, scala, scala-reference"},{"@type":"BreadcrumbList","@id":"https:\/\/www.garysieling.com\/blog\/scala-case-example\/#breadcrumblist","itemListElement":[{"@type":"ListItem","@id":"https:\/\/www.garysieling.com\/blog#listItem","position":1,"name":"Home","item":"https:\/\/www.garysieling.com\/blog","nextItem":{"@type":"ListItem","@id":"https:\/\/www.garysieling.com\/blog\/category\/code-examples\/#listItem","name":"Code Examples"}},{"@type":"ListItem","@id":"https:\/\/www.garysieling.com\/blog\/category\/code-examples\/#listItem","position":2,"name":"Code Examples","item":"https:\/\/www.garysieling.com\/blog\/category\/code-examples\/","nextItem":{"@type":"ListItem","@id":"https:\/\/www.garysieling.com\/blog\/scala-case-example\/#listItem","name":"Scala case example"},"previousItem":{"@type":"ListItem","@id":"https:\/\/www.garysieling.com\/blog#listItem","name":"Home"}},{"@type":"ListItem","@id":"https:\/\/www.garysieling.com\/blog\/scala-case-example\/#listItem","position":3,"name":"Scala case example","previousItem":{"@type":"ListItem","@id":"https:\/\/www.garysieling.com\/blog\/category\/code-examples\/#listItem","name":"Code Examples"}}]},{"@type":"Organization","@id":"https:\/\/www.garysieling.com\/blog\/#organization","name":"Gary Sieling","description":"Software Engineer","url":"https:\/\/www.garysieling.com\/blog\/"},{"@type":"Person","@id":"https:\/\/www.garysieling.com\/blog\/author\/gary\/#author","url":"https:\/\/www.garysieling.com\/blog\/author\/gary\/","name":"gary","image":{"@type":"ImageObject","@id":"https:\/\/www.garysieling.com\/blog\/scala-case-example\/#authorImage","url":"https:\/\/secure.gravatar.com\/avatar\/0be925276d848ffe98a6a9dc8cf33e67?s=96&d=identicon&r=g","width":96,"height":96,"caption":"gary"}},{"@type":"WebPage","@id":"https:\/\/www.garysieling.com\/blog\/scala-case-example\/#webpage","url":"https:\/\/www.garysieling.com\/blog\/scala-case-example\/","name":"Scala case example - Gary Sieling","description":"\"Case\" is used very frequently in Scala, as it is much more useful than other languages. For instance, you might wish to make a lambda that is defined only some of the time. This is convenient for writing tools to do ETL or scraping, where you don't know how to handle some value, and aren't","inLanguage":"en-US","isPartOf":{"@id":"https:\/\/www.garysieling.com\/blog\/#website"},"breadcrumb":{"@id":"https:\/\/www.garysieling.com\/blog\/scala-case-example\/#breadcrumblist"},"author":{"@id":"https:\/\/www.garysieling.com\/blog\/author\/gary\/#author"},"creator":{"@id":"https:\/\/www.garysieling.com\/blog\/author\/gary\/#author"},"datePublished":"2015-09-12T01:41:49+00:00","dateModified":"2015-09-12T01:41:49+00:00"},{"@type":"WebSite","@id":"https:\/\/www.garysieling.com\/blog\/#website","url":"https:\/\/www.garysieling.com\/blog\/","name":"Gary Sieling","description":"Software Engineer","inLanguage":"en-US","publisher":{"@id":"https:\/\/www.garysieling.com\/blog\/#organization"}}]},"og:locale":"en_US","og:site_name":"Gary Sieling - Software Engineer","og:type":"article","og:title":"Scala case example - Gary Sieling","og:description":"&quot;Case&quot; is used very frequently in Scala, as it is much more useful than other languages. For instance, you might wish to make a lambda that is defined only some of the time. This is convenient for writing tools to do ETL or scraping, where you don't know how to handle some value, and aren't","og:url":"https:\/\/www.garysieling.com\/blog\/scala-case-example\/","article:published_time":"2015-09-12T01:41:49+00:00","article:modified_time":"2015-09-12T01:41:49+00:00","twitter:card":"summary_large_image","twitter:title":"Scala case example - Gary Sieling","twitter:description":"&quot;Case&quot; is used very frequently in Scala, as it is much more useful than other languages. For instance, you might wish to make a lambda that is defined only some of the time. This is convenient for writing tools to do ETL or scraping, where you don't know how to handle some value, and aren't"},"aioseo_meta_data":{"post_id":"2581","title":null,"description":null,"keywords":null,"keyphrases":null,"primary_term":null,"canonical_url":null,"og_title":null,"og_description":null,"og_object_type":"default","og_image_type":"default","og_image_url":null,"og_image_width":null,"og_image_height":null,"og_image_custom_url":null,"og_image_custom_fields":null,"og_video":null,"og_custom_url":null,"og_article_section":null,"og_article_tags":null,"twitter_use_og":false,"twitter_card":"default","twitter_image_type":"default","twitter_image_url":null,"twitter_image_custom_url":null,"twitter_image_custom_fields":null,"twitter_title":null,"twitter_description":null,"schema":{"blockGraphs":[],"customGraphs":[],"default":{"data":{"Article":[],"Course":[],"Dataset":[],"FAQPage":[],"Movie":[],"Person":[],"Product":[],"ProductReview":[],"Car":[],"Recipe":[],"Service":[],"SoftwareApplication":[],"WebPage":[]},"graphName":"","isEnabled":true},"graphs":[]},"schema_type":"default","schema_type_options":null,"pillar_content":false,"robots_default":true,"robots_noindex":false,"robots_noarchive":false,"robots_nosnippet":false,"robots_nofollow":false,"robots_noimageindex":false,"robots_noodp":false,"robots_notranslate":false,"robots_max_snippet":null,"robots_max_videopreview":null,"robots_max_imagepreview":"large","priority":null,"frequency":null,"local_seo":null,"limit_modified_date":false,"created":"2023-02-04 16:30:38","updated":"2026-07-06 01:17:34","ai":null,"breadcrumb_settings":null,"seo_analyzer_scan_date":null},"aioseo_breadcrumb":"<div class=\"aioseo-breadcrumbs\"><span class=\"aioseo-breadcrumb\">\n\t\t\t<a href=\"https:\/\/www.garysieling.com\/blog\" title=\"Home\">Home<\/a>\n\t\t<\/span><span class=\"aioseo-breadcrumb-separator\">&raquo;<\/span><span class=\"aioseo-breadcrumb\">\n\t\t\t<a href=\"https:\/\/www.garysieling.com\/blog\/category\/code-examples\/\" title=\"Code Examples\">Code Examples<\/a>\n\t\t<\/span><span class=\"aioseo-breadcrumb-separator\">&raquo;<\/span><span class=\"aioseo-breadcrumb\">\n\t\t\tScala case example\n\t\t<\/span><\/div>","aioseo_breadcrumb_json":[{"label":"Home","link":"https:\/\/www.garysieling.com\/blog"},{"label":"Code Examples","link":"https:\/\/www.garysieling.com\/blog\/category\/code-examples\/"},{"label":"Scala case example","link":"https:\/\/www.garysieling.com\/blog\/scala-case-example\/"}],"amp_enabled":true,"_links":{"self":[{"href":"https:\/\/www.garysieling.com\/blog\/wp-json\/wp\/v2\/posts\/2581"}],"collection":[{"href":"https:\/\/www.garysieling.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.garysieling.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.garysieling.com\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.garysieling.com\/blog\/wp-json\/wp\/v2\/comments?post=2581"}],"version-history":[{"count":0,"href":"https:\/\/www.garysieling.com\/blog\/wp-json\/wp\/v2\/posts\/2581\/revisions"}],"wp:attachment":[{"href":"https:\/\/www.garysieling.com\/blog\/wp-json\/wp\/v2\/media?parent=2581"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.garysieling.com\/blog\/wp-json\/wp\/v2\/categories?post=2581"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.garysieling.com\/blog\/wp-json\/wp\/v2\/tags?post=2581"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}