{"id":2575,"date":"2015-09-12T01:25:36","date_gmt":"2015-09-12T01:25:36","guid":{"rendered":"http:\/\/www.garysieling.com\/blog\/?p=2575"},"modified":"2015-09-12T01:25:36","modified_gmt":"2015-09-12T01:25:36","slug":"scala-lambda-example","status":"publish","type":"post","link":"https:\/\/www.garysieling.com\/blog\/scala-lambda-example\/","title":{"rendered":"Scala Lambda Example"},"content":{"rendered":"<p>Lambdas are just anonymous functions, although typically they are expected to be side-effect free (more of a calculus-style function that does a computation)<\/p>\n<p>For instance, in Javascript you might do this:<\/p>\n<pre lang=\"javascript\">\nfunction x() {\n}\n\n...or....\n\nvar y = function() { }\n\n<\/pre>\n<p>The equivalent in Scala might be:<\/p>\n<pre lang=\"scala\">\nval y = () => {}\n<\/pre>\n<pre lang=\"Scala\"> \ny()\ny: () => Unit = <function0>\n<\/pre>\n<p>So you can see the type it returns is &#8220;Unit&#8221; which appears approximately equivalent to &#8220;void&#8221;, however unlike &#8220;void&#8221; in Java you can declare things as Unit (although with only a single value):<\/p>\n<pre lang=\"Scala\">\nval x: Unit = ()\n<\/pre>\n<p>Whether this is useful is questionable.<\/p>\n<p>You could, for instance make a lambda that doubles a value, and use it like so (the forms listed are all equivalent):<\/p>\n<pre lang=\"scala\">\nval y = (x: Int) => x * 2\n\nList(1, 2, 3).map(y)\nList(1, 2, 3) map y\nList(1, 2, 3).map((x: Int) => x * 2)\n<\/pre>\n<p>All returning:<\/p>\n<pre>\nres11: List[Int] = List(2, 4, 6)\n<\/pre>\n<p>There isn&#8217;t a way to make the lambda type-less (or generic):<\/p>\n<pre>\nval y = (x) => x\n\n<console>:8: error: missing parameter type\n       val y = (x) => x\n<\/pre>\n<p>That said, you can cheat this a couple ways, either with Any (most similar to void* in C):<\/p>\n<pre lang=\"Scala\">\nval y = (x: Any) => x\n\ny: Any => Any = <function1>\n<\/pre>\n<p>Or, instead of making a lambda, make a method (T being a generic type here):<\/p>\n<pre lang=\"Scala\">\ndef y[T] = (x: T) => x \n<\/pre>\n<p>Which does actually work:<\/p>\n<pre>\ny: [T]=> T => T\n\nscala> y(1)\nres7: Int = 1\n<\/pre>\n<p>This is basically defining a method in some object (less obvious if you&#8217;re typing the Scala REPL), although it might otherwise behave similarly to lamdbas. This is familiar, in that it is similar to methods in Java.<\/p>\n<p>In the shorter lambdas, the lack of a &#8220;return&#8221; feels very natural, but as these get longer it starts to feel weird. This is especially true if the code gets longer &#8211; when there are multiple statements, the result of the last one is implicitly returned (when writing code, it can be helpful to define the return type of the function, so you get an error if you accidentally return the wrong thing)<\/p>\n<p>You should resist the temptation to add &#8220;return&#8221; to your functions. The authors of Scala made the questionable decision to change the traditional meaning of return, such that it takes you out of all lambdas, and up out of the most recent method on the stack &#8211; which is likely quite a ways up, and not at all what you&#8217;d expect.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Lambdas are just anonymous functions, although typically they are expected to be side-effect free (more of a calculus-style function that does a computation) For instance, in Javascript you might do this: function x() { } &#8230;or&#8230;. var y = function() { } The equivalent in Scala might be: val y = () => {} y() &hellip; <\/p>\n<p class=\"link-more\"><a href=\"https:\/\/www.garysieling.com\/blog\/scala-lambda-example\/\" class=\"more-link\">Continue reading<span class=\"screen-reader-text\"> &#8220;Scala Lambda 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=\"Lambdas are just anonymous functions, although typically they are expected to be side-effect free (more of a calculus-style function that does a computation) For instance, in Javascript you might do this: function x() { } ...or.... var y = function() { } The equivalent in Scala might be: val y = () =&gt; {} y()\" \/>\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-lambda-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 Lambda Example - Gary Sieling\" \/>\n\t\t<meta property=\"og:description\" content=\"Lambdas are just anonymous functions, although typically they are expected to be side-effect free (more of a calculus-style function that does a computation) For instance, in Javascript you might do this: function x() { } ...or.... var y = function() { } The equivalent in Scala might be: val y = () =&gt; {} y()\" \/>\n\t\t<meta property=\"og:url\" content=\"https:\/\/www.garysieling.com\/blog\/scala-lambda-example\/\" \/>\n\t\t<meta property=\"article:published_time\" content=\"2015-09-12T01:25:36+00:00\" \/>\n\t\t<meta property=\"article:modified_time\" content=\"2015-09-12T01:25:36+00:00\" \/>\n\t\t<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n\t\t<meta name=\"twitter:title\" content=\"Scala Lambda Example - Gary Sieling\" \/>\n\t\t<meta name=\"twitter:description\" content=\"Lambdas are just anonymous functions, although typically they are expected to be side-effect free (more of a calculus-style function that does a computation) For instance, in Javascript you might do this: function x() { } ...or.... var y = function() { } The equivalent in Scala might be: val y = () =&gt; {} y()\" \/>\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-lambda-example\\\/#blogposting\",\"name\":\"Scala Lambda Example - Gary Sieling\",\"headline\":\"Scala Lambda Example\",\"author\":{\"@id\":\"https:\\\/\\\/www.garysieling.com\\\/blog\\\/author\\\/gary\\\/#author\"},\"publisher\":{\"@id\":\"https:\\\/\\\/www.garysieling.com\\\/blog\\\/#organization\"},\"datePublished\":\"2015-09-12T01:25:36+00:00\",\"dateModified\":\"2015-09-12T01:25:36+00:00\",\"inLanguage\":\"en-US\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/www.garysieling.com\\\/blog\\\/scala-lambda-example\\\/#webpage\"},\"isPartOf\":{\"@id\":\"https:\\\/\\\/www.garysieling.com\\\/blog\\\/scala-lambda-example\\\/#webpage\"},\"articleSection\":\"Code Examples, scala, scala-reference\"},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/www.garysieling.com\\\/blog\\\/scala-lambda-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-lambda-example\\\/#listItem\",\"name\":\"Scala Lambda Example\"},\"previousItem\":{\"@type\":\"ListItem\",\"@id\":\"https:\\\/\\\/www.garysieling.com\\\/blog#listItem\",\"name\":\"Home\"}},{\"@type\":\"ListItem\",\"@id\":\"https:\\\/\\\/www.garysieling.com\\\/blog\\\/scala-lambda-example\\\/#listItem\",\"position\":3,\"name\":\"Scala Lambda 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-lambda-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-lambda-example\\\/#webpage\",\"url\":\"https:\\\/\\\/www.garysieling.com\\\/blog\\\/scala-lambda-example\\\/\",\"name\":\"Scala Lambda Example - Gary Sieling\",\"description\":\"Lambdas are just anonymous functions, although typically they are expected to be side-effect free (more of a calculus-style function that does a computation) For instance, in Javascript you might do this: function x() { } ...or.... var y = function() { } The equivalent in Scala might be: val y = () => {} y()\",\"inLanguage\":\"en-US\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/www.garysieling.com\\\/blog\\\/#website\"},\"breadcrumb\":{\"@id\":\"https:\\\/\\\/www.garysieling.com\\\/blog\\\/scala-lambda-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:25:36+00:00\",\"dateModified\":\"2015-09-12T01:25:36+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 Lambda Example - Gary Sieling","description":"Lambdas are just anonymous functions, although typically they are expected to be side-effect free (more of a calculus-style function that does a computation) For instance, in Javascript you might do this: function x() { } ...or.... var y = function() { } The equivalent in Scala might be: val y = () => {} y()","canonical_url":"https:\/\/www.garysieling.com\/blog\/scala-lambda-example\/","robots":"max-image-preview:large","keywords":"","webmasterTools":{"miscellaneous":""},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"BlogPosting","@id":"https:\/\/www.garysieling.com\/blog\/scala-lambda-example\/#blogposting","name":"Scala Lambda Example - Gary Sieling","headline":"Scala Lambda Example","author":{"@id":"https:\/\/www.garysieling.com\/blog\/author\/gary\/#author"},"publisher":{"@id":"https:\/\/www.garysieling.com\/blog\/#organization"},"datePublished":"2015-09-12T01:25:36+00:00","dateModified":"2015-09-12T01:25:36+00:00","inLanguage":"en-US","mainEntityOfPage":{"@id":"https:\/\/www.garysieling.com\/blog\/scala-lambda-example\/#webpage"},"isPartOf":{"@id":"https:\/\/www.garysieling.com\/blog\/scala-lambda-example\/#webpage"},"articleSection":"Code Examples, scala, scala-reference"},{"@type":"BreadcrumbList","@id":"https:\/\/www.garysieling.com\/blog\/scala-lambda-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-lambda-example\/#listItem","name":"Scala Lambda Example"},"previousItem":{"@type":"ListItem","@id":"https:\/\/www.garysieling.com\/blog#listItem","name":"Home"}},{"@type":"ListItem","@id":"https:\/\/www.garysieling.com\/blog\/scala-lambda-example\/#listItem","position":3,"name":"Scala Lambda 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-lambda-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-lambda-example\/#webpage","url":"https:\/\/www.garysieling.com\/blog\/scala-lambda-example\/","name":"Scala Lambda Example - Gary Sieling","description":"Lambdas are just anonymous functions, although typically they are expected to be side-effect free (more of a calculus-style function that does a computation) For instance, in Javascript you might do this: function x() { } ...or.... var y = function() { } The equivalent in Scala might be: val y = () => {} y()","inLanguage":"en-US","isPartOf":{"@id":"https:\/\/www.garysieling.com\/blog\/#website"},"breadcrumb":{"@id":"https:\/\/www.garysieling.com\/blog\/scala-lambda-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:25:36+00:00","dateModified":"2015-09-12T01:25:36+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 Lambda Example - Gary Sieling","og:description":"Lambdas are just anonymous functions, although typically they are expected to be side-effect free (more of a calculus-style function that does a computation) For instance, in Javascript you might do this: function x() { } ...or.... var y = function() { } The equivalent in Scala might be: val y = () =&gt; {} y()","og:url":"https:\/\/www.garysieling.com\/blog\/scala-lambda-example\/","article:published_time":"2015-09-12T01:25:36+00:00","article:modified_time":"2015-09-12T01:25:36+00:00","twitter:card":"summary_large_image","twitter:title":"Scala Lambda Example - Gary Sieling","twitter:description":"Lambdas are just anonymous functions, although typically they are expected to be side-effect free (more of a calculus-style function that does a computation) For instance, in Javascript you might do this: function x() { } ...or.... var y = function() { } The equivalent in Scala might be: val y = () =&gt; {} y()"},"aioseo_meta_data":{"post_id":"2575","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 Lambda 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 Lambda Example","link":"https:\/\/www.garysieling.com\/blog\/scala-lambda-example\/"}],"amp_enabled":true,"_links":{"self":[{"href":"https:\/\/www.garysieling.com\/blog\/wp-json\/wp\/v2\/posts\/2575"}],"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=2575"}],"version-history":[{"count":0,"href":"https:\/\/www.garysieling.com\/blog\/wp-json\/wp\/v2\/posts\/2575\/revisions"}],"wp:attachment":[{"href":"https:\/\/www.garysieling.com\/blog\/wp-json\/wp\/v2\/media?parent=2575"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.garysieling.com\/blog\/wp-json\/wp\/v2\/categories?post=2575"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.garysieling.com\/blog\/wp-json\/wp\/v2\/tags?post=2575"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}