首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

在scala匿名函数中使用"_“的简短规则让我感到困惑

在Scala中,使用"_"作为匿名函数的简短规则是一种常见的语法。它可以用来表示一个或多个参数,具体取决于上下文的要求。

在匿名函数中使用""的主要目的是简化代码,特别是在只使用参数一次的情况下。下面是一些使用""的常见情况:

  1. 单个参数:如果匿名函数只有一个参数,并且该参数只在函数体中使用一次,可以使用"_"来代替参数名。例如:
代码语言:txt
复制
val list = List(1, 2, 3, 4, 5)
val squaredList = list.map(_ * _)

在上面的例子中,"_ * _"表示一个接受两个参数的匿名函数,它将两个参数相乘。

  1. 多个参数:如果匿名函数有多个参数,并且其中某些参数只在函数体中使用一次,可以使用多个"_"来代替这些参数。例如:
代码语言:txt
复制
val list = List(1, 2, 3, 4, 5)
val sum = list.reduce(_ + _)

在上面的例子中,"_ + _"表示一个接受两个参数的匿名函数,它将两个参数相加。

  1. 参数位置:在某些情况下,可以使用"_"来指定参数的位置。例如:
代码语言:txt
复制
val list = List(1, 2, 3, 4, 5)
val partialFunc = list.foldLeft(List.empty[Int])((_, elem) => elem :: _)

在上面的例子中,"elem :: _"表示一个接受两个参数的匿名函数,它将元素elem添加到列表的头部。

需要注意的是,使用"_"的简短规则可能会降低代码的可读性,特别是在复杂的函数中。因此,建议在适当的情况下使用具名函数来提高代码的可读性和可维护性。

关于Scala匿名函数和"_"的更多信息,可以参考腾讯云的Scala开发文档:Scala开发文档

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

C++雾中风景5:Explicits better than implicit.聊聊Explicit.

关于Explicit还是Implicit一直是编程语言中能让程序员们干起架争议。那些聪明老鸟总是觉得Implicit规则他们能够一目十行,减少样板代码羁绊。...而很多时候,Implicit很多规则新手或者是合作开发搭档痛苦不堪。文章标题也写明了笔者态度,显式代码之中指明自己意图,会程序更加明晰。...这就被称之为隐式类类型转换,它存在于自定义类构造函数。C++编译器会对只有一个参数构造函数也定义了一个隐式转换,将该构造函数对应数据类型数据转换为该类对象。...,通过隐式类类型转换,被默认构造了一个A类型匿名对象,传入了函数printA,所以代码能够正常编译运行。...2.Explicit关键字 explicit主要用于"修饰"构造函数,使得它不用于程序需要通过此构造函数进行"隐式"转换情况。指定此关键字,需要隐式转换方可进行程序将不能编译通过。

36720

Scala之偏函数Partial Function

http://blog.csdn.net/bluishglc/article/details/50995939 从使用case语句构造匿名函数谈起 Scala里,我们可以使用case语句来创建一个匿名函数...使用case语句构造匿名函数“额外”好处 使用case语句构造匿名函数是有“额外”好处,这个“好处”在下面这个例子得到了充分体现: List(1, 3, 5, "seven") map { case...这就是case语句“额外”好处:case语句(组合)除了可以被编译为匿名函数(类型是FunctionX,Scala里,所有的函数字面量都是一个对象,这个对象类型是FunctionX),还可以非常方便编译为一个偏函数...Trait 首先,Scala里,一切皆对象,函数字面量(匿名函数)也不例外!...为什么只有针对单一参数函数,而不是像Function特质那样,拥有多个版本PartialFunction呢?刚刚接触偏函数时,这也感到费解,但看透了偏函数实质之后就会觉得很合理了。

93990

Scala Collections集合几个重要概念

、一个匿名函数 接受一个或者多个参数,返回一个Boolean值,如上面这个函数返回值就是true或者false,所以它是一个谓词 匿名函数是什么( What an anonymous function...anonymous function: (i: Int) => i % 2 == 0 Here’s the short form of the same function: _ % 2 == 0 匿名函数是一个很重要概念...,上面第一段代码一个完整匿名函数例子,下面一个简化版例子,他们看起来并不像,但当在集合里用到filter方法时,这种简短代码会非常强大 scala> val list = List.range(...但是想你也会同意filter这种方式既精简又易读 Collection methods like filter, foreach, map, reduceLeft, and many more have...所以相比JAVA,Scala可以少写很多循环

48530

8.scala高阶函数

高阶函数是指使用其他函数作为参数、或者返回一个函数作为结果函数Scala函数是“一等公民”,所以允许定义高阶函数。...这里术语可能有点困惑,我们约定,使用函数值作为参数,或者返回值为函数函数”和“方法”,均称之为“高阶函数”。...一般来说,=>左边元组是函数参数列表,而右边表达式值则为函数返回值。第3行,函数doubleSalary被应用在列表salaries每一个元素。...编译器已经知道了参数类型(一个单独Int),你可以只给出函数右半部分,不过需要使用_代替参数名(在上一个例子是x) 强制转换方法为函数 你同样可以传入一个对象方法作为高阶函数参数,这是因为Scala...在这个例子,返回匿名函数是 (endpoint: String, query: String) => s"https://www.example.com/$endpoint?$query"。

49010

Scala专题系列(一):Scala基础

Scala 拥有一套复杂类型系统, Scala 方言既能用于编写简短解释脚本,也能用于构建大型复杂系统 一 :Scala特性: 面向对象特性 Scala是一种纯面向对象语言,Scala 引入特征...函数式编程 Scala也是一种函数式语言,其函数也能当成值来使用Scala提供了轻量级语法用以定义匿名函数,支持高阶函数,允许嵌套多层函数,并支持柯里化。...var price:double = 100.0 关于上述提到,val和var声明变量时必须初始化这一个规则,也有例外情况,比如这两个关键字均可以用在构造函数参数,这时候变量是该类一个属性,因此显然不必声明时进行初始化...此时如果用 val 声明,该属性是不可变;如果用 var 声明,则该属性是可变 为了减少可变变量并发编程,引起bug,应该尽可能使用不可变变量,而比较常见一种现象是当你正在使用对象被其他人修改时...方法返回值类型,以下情况必须显式声明其类型。 – 方法明显地使用了 return(即使方法末尾也是如此)。 – 递归方法。

70440

Machine Learning学习之路

先感谢下好友王峰给我一些建议。他Spark和Scala上有一些经验,前进速度加快了一些。...对于缺乏这些背景,即使一个简单公式,也有时会感到困惑。...觉得了解数学理论,可以: 成为真正行家 未来路还很远,怎么能戛然而止! 使用算法来帮助自己一些事情,或者实现一个新算法。 现在人工智能潜力很大,可以自己好好玩玩。...学习Scala函数式编程 对于大数据处理来说,Spark和Scala结合是现在大趋势。...博文有: 学习Scala: 初学者应该了解知识 函数式编程 : 一个程序猿进化故事 Scala underscore用途 不变(Invariant), 协变(Covarinat),

80160

JavaScript Scoping and Hoisting

虽然这看起来似乎感到陌生,危险,困惑,但是这就是JavaScript语言强大并富有表现力特征。不知道对这个特殊行为是否有标准名称,但是喜欢用“hoisting”来标识它。...JavaScript作用域是如此感到困惑,究其原因是JavaScript看起来像是C家族语言。...Named Function Expressions(有名函数表达式) 你可以函数表达式给定义函数一个名字(使用类似函数声明语法)。...强烈建议你每个作用域内只使用一个var statement,并且把它(var statement)放到作用域顶部。如果你强迫自己这样做的话,你永远不会有hoisting相关困惑。...希望这篇文章已经揭示了,对JavaScript程序员来说,最困惑根源之一(scoping,hoisting)。尽可能透彻地阐述这件事,并避免阐述这件事时 制造更多困惑

49920

spark开发基础之从Scala符号入门Scala

这里出现英文to,也是比较奇怪,我们看到过变量和函数使用英文,但是for语句中使用英文,这也太随意了,不知道以为是在做阅读理解。...而这个其实是Scala匿名函数。 左边是参数,右边是函数体。我们印象函数体一般都是大括号,而这里真让我们难以理解。...如果初学,我们可能不知道为什么要产生匿名函数,因为匿名函数基本上使用 一次,后面就用不到了。...下面来看下Scala函数定义,我们就能明白了,int=含义 ? scala函数定义是使用关键字def,然后函数名,括号参数定义,更是与传统语言反着来。...~~~~~~~~~~~~~~ 第五个“_” scala ,符号“_”相当于java 通配符“*”。这个有很多含义 1、作为“通配符”,类似Java*。

2.4K100

Scala入门学习笔记三--数组使用

前言 本篇主要讲ScalaArray、BufferArray、List,更多教程请参考:Scala教程 本篇知识点概括 若长度固定则使用Array,若长度可能有 变化则使用ArrayBuffer...Scala等效数据结构为ArrayBuffer //导入可变包,Scala可变集合都是放在mutable使用时要导入 scala> import scala.collection.mutable.ArrayBuffer...("") res97: String = 7、ArrayBuffer Scaladoc解析 初学者查看sacaladoc时常常会感到困惑...dropWhile传入是一个函数,该函数返回值是布尔类型,dropWhile反回是操作后ArrayBuffer ? 8、多维数组 和Java一样,多维数组是通过数组数组来实现。...//第一种构造方式 val metrix = Array.ofDim[Double](3, 4) //3行 4列 //访问其中元素 metrix(row)(column) =42 //可以创建不规则数组

1.2K100

Pythonlambda表达式

目录 1.简约而不简单lambda表达式 1.1 匿名函数基础 1.2 为什么要使用匿名函数?...1.3 Python 函数式编程 ---- 1.简约而不简单lambda表达式 Python,除了常规函数,你应该也会在代码见到一些“非常规”函数,它们往往很简短,就一行,并且有个很酷炫名字—...匿名函数实际工作同样举足轻重,正确地运用匿名函数,能让我们代码更简洁、易读。让我们一起来看下Python简约而不简单匿名函数。...不过,一些情况下,使用匿名函数 lambda,可以帮助我们大大简化代码复杂度,提高代码可读性。 通常,我们用函数目的无非是这么几点:减少代码重复性;模块化代码。 不过,再试想一下这样情况。...举个很简单例子,比如对于一个列表,列表元素值都变为原来两倍,我们可以写成下面的形式: def multiply_2(l): for index in range(0, len(l)

52360

【Java学习笔记之三十一】详解Java8 lambda表达式

Java 8 发布日期是2014年3月18日,这次开创性发布Java社区引发了不少讨论,并大家感到激动。特性之一便是随同发布lambda表达式,它将允许我们将行为传到函数里。...Java 8之前,如果想将行为传入函数,仅有的选择就是匿名类,需要6行代码。而定义行为最重要那行代码,却混在中间不够突出。Lambda表达式取代了匿名类,取消了模板,允许用函数式风格编写代码。...Java 8,你可以用更可读lambda表达式换掉丑陋匿名类。...把这个留做练习,应该不难,可以按照使用lambda表达式实现 Runnable 和 ActionListener 过程套路来做。...3)lambda内部可以使用静态、非静态和局部变量,这称为lambda内变量捕获。 4)Lambda表达式Java又称为闭包或匿名函数,所以如果有同事把它叫闭包时候,不用惊讶。

1.5K50

JS箭头函数之:为何用?怎么用?何时用?

箭头函数有两个主要优点: 更简短函数; 更直观作用域和this绑定(不绑定this) 因为这些优点,箭头函数比起其他形式函数声明更受欢迎。...比如,受欢迎airbnb eslint configuration库会强制使用JavaScript箭头函数创建匿名函数。 然而,箭头函数有优点,也有一些“缺点”。这就需要在使用时候做一些权衡。...引入箭头函数有两个方面的作用:更简短函数并且不绑定this 更简短函数 var elements = ['h1', 'div', 'span', 'section']; elements.map...不绑定this 箭头函数出现之前,每个新定义函数都有它自己this值(构造函数情况下是一个新对象,严格模式函数调用则为undefined,如果该函数被作为"对象方法"调用则为基础对象等...var func = () => 1; // SyntaxError: expected expression, got '=>' 解析顺序 虽然箭头函数箭头不是运算符,但箭头函数具有与常规函数不同特殊运算符优先级解析规则

3.8K10

JS箭头函数三连问:为何用、怎么用、何时用

什么才是箭头函数 JS箭头函数大概就像pythonlambda(python定义匿名函数关键字)和rubyblocks(类似于闭包)一样。...这跟传统函数很相像,只是我们省略了function关键字,并且添加了一个=>参数后面。 并且,这里也有很多种情况,箭头函数结构变得更加简洁。...}(){anonymous}()//anonymous 匿名 有动态上下文函数 还有最有一种箭头函数困惑情形,就是this是动态绑定时候。...如果你以下情形使用箭头函数,那么this动态绑定不会如期工作,并且你也会困惑这些代码为什么不像预期那样工作,也会给你之后工作的人造成麻烦。...当然你也可以在上面的情形之下谨慎使用箭头函数。但特别是jquery和vue情况下, 这通常会干扰正常功能, 并使您感到困惑:为什么看起来跟别人代码一样代码就是不工作。

2.5K20

函数函数字面量一些简化写法及报错解析

scala 下划线解析报错: missing parameter type for expanded function 本文首先介绍下eta-expansion概念,以及其对下划线expand解析规则匿名函数简写注意事项...closest closing Expr : top-level expressions or expressions in parentheses 匿名函数简写注意事项: 所以当匿名函数有多个括号嵌套时候...,不要使用_简写方式 ,而应该用普通匿名函数书写方式。...6) scala> List(1,2,3).map(_*2+1) res14: List[Int] = List(3, 5, 7) 但是吧*2 换成(2) 则出错,因为根据就近原则 _2 会在最近括号解析成匿名函数...:expressions,所以如下是允许 scala> List(1,2,3,4).foreach(print(_)) 1234 (.toString) 是一个括号()里表达式,会expand解析成匿名函数

1.1K50

Spark基础-scala学习(四、函数式编程)

函数式编程 将函数赋值给变量 匿名函数 高阶函数 高级函数类型推断 scala常用高阶函数 闭包 sam转换 currying函数 return 将函数赋值给变量 scala函数是一等公民,可以独立定义...,此时函数被称为匿名函数 可以直接定义函数后,将函数赋值给某个变量;也可以将直接定义匿名函数传入其他函数之中 scala定义匿名函数语法规则就是,(参数名:参数类型)=>函数scala> val...是作为函数对象变量存在,因此每个函数才可以拥有不同msg scala编译器会确保上述闭包机制 SAM转换 java,不支持直接将函数传入一个方法作为参数,通常来说,唯一办法就是定义一个实现了某个接口实例对象...此时就可以使用scala提供调用java方法时,使用功能,SAM转换,即将SAM转换为scala函数使用SAM转换,需要使用scala提供特性,隐式转换 scala> import javax.swing...scala,return用于匿名函数返回值给包含匿名函数带名函数,并作为带名函数返回值 使用return匿名函数,是必须给出返回类型,否则无法通过编译 scala> :paste //

71030

为什么 Java 后端开发没有大规模采用 Kotlin?

招聘方面,我们并没有觉得很难招到 Kotlin 开发者。我们很清楚,有些工作需要使用这门新语言,并允许开发者在工作边学边用。...团队完全掌握新语言之前,我们建议尽可能长时间地使用普通 Kotlin 特性。最后,团队大多数人都会在选择很酷语言特性和保持代码库易于理解之间找到平衡点。...8“一个代码库中使用两种语言感到困惑” 这是实际项目中没有尝试过 Kotlin 的人经常会有的担忧。...对于这种情况,我们建议“在工作边学边用”(以编码道场、培训等形式),创造一个可以进行这种实验安全环境。 这样可以帮助团队评估他们对 Java 使用状况,以及是否值得 Kotlin 上投入。...10“看不出 Kotlin 会带来什么好处” 有时候,Java 开发者意识不到语言方面存在限制,或者是因为他们已经习惯了。有时候,他们会抗拒新语言,因为新语言会他们质疑自己正在使用语言。

1K40

从 Java 到 Kotlin,再从 Kotlin 回归 Java

这是 Kotlin 感到最大惊喜地方。看看这个函数: ? 当你调用 inc(1) 时候会输出什么呢? Kotlin 中方法参数是一个值,所以你不能改变 num 参数。...这人觉得恼火,因为: 首先,你得书写或者阅读介于名称和类型之间那个讨厌冒号。这个多余字母到底起什么作用?为什么要把名称和类型分隔开?不知道。不过知道这会加大使用Kotlin难度。...可以想像那是一个匿名内部类单例实现。而实际上,这个类并不是匿名,它名字是 Companion,你可以省略这个名称。明白吗?这很简单。” 很喜欢对象声明概念——单例是种很有用模式。...对于我来说,这感到困惑。 这里最具争议的话题是默认封闭。可能是因为 Java 程序员过度使用了继承,可能你应该在允许类被继承之前想想清楚。不过我们生活在框架和时代,而框架往往喜欢 AOP。...Kotlin会你深陷其中。事实上,Kotlin语法更接近Scala。这是赌上全部。你将不得不忘记Java并切换到完全不同语言。 相反,学习Groovy是一个愉快旅程。Groovy亲手引领你。

1.8K40

Scala 【 10 函数式编程 】

Scala 函数也可以不需要命名,此时函数被称为匿名函数。 ​...可以直接定义函数之后,将函数赋值给某个变量;也可以将直接定义匿名函数传入其他函数之中 ​ Scala 定义匿名函数语法规则就是: ​ (参数名: 参数类型) => 函数体 val sayHelloFunc...此时就可以使用 Scala 提供调用 Java 方法时,使用功能,SAM 转换,即将 SAM 转换为 Scala 函数。 ​ 要使用SAM转换,需要使用 Scala 提供特性,隐式转换。...函数调用过程,就变为了两个函数连续调用形式。... Scala ,return 用于匿名函数返回值给包含匿名函数带名函数,并作为带名函数返回值。 ​ 使用return匿名函数,是必须给出返回类型,否则无法通过编译。

27910

深入探索ScalaOption

文章《并非Null Object这么简单》已经阐释了这个问题。然而不仅仅是空指针异常,当程序代码中出现各种错误时,我们处理方式该如何呢? 现在,让我们再看看Scala语法层面的Option。...那么,想像一下当这样方法被系统许多地方直接或间接调用,可能会造成什么样灾难?!假设这样代码被放到安全要求极高系统,你是否会感到不寒而栗?...所谓承担责任,并不是事后追究,而是每次写完代码后都要再三推敲,力求每行代码都是干净利落,没有歧义,没有潜在错误。 然而,针对以上代码,要怎样才能保证程序调用健壮性呢?...这也是如上代码optGet之类函数由来。即使是Scala内置库,如Stringsplit函数,返回也并非一个Option,而是一个普通数组。...然而,多数时候我们应该使用定义Option函数,这些函数可以代码变得更简单。

1.1K70

多面编程语言Scala

掌握众多编程语言之中,Scala无疑是其中最让感到舒适,如Scala官网宣称:“Object-OrientedMeetsFunctional”,这一句当属对Scala最抽象精准描述,它把近二十年间大行其道面向对象编程与旧而有之函数式编程有机结合起来...实际上,这无关类型争论,而是类型系统实现范畴。是的,Scala里,你可以放心大胆地使用vals="ABC",而Scala里强大类型推断和模式匹配,绝对会你爱不释手。...Scala虽然是静态类型系统语言,但同样提供了这两个福利,你倍感贴心。...输出如下: JavaScript很棒~ Scala很棒~ Golang很棒~ map()函数List上迭代,对List每个元素,都会调用以参数形式传入Lambda表达式(或者叫匿名函数)。...调用时,我们分别传入求圆周长和圆面积匿名函数,用于实现calc函数逻辑。

2.5K40
领券