在Java中是可以使用变长参数的,如下面的方法:

public void check(String ... args){
for(String tmp : args){
System.out.println(tmp);
}
}

在scala中也可以使用变长参数。和java一样,也是只有最后一个参数可以接收可变长度的参数。使用方式是在参数类型后使用特殊符号“*”,如下面的max()方法:

def max(values: Int*) = values.foldLeft(values(0)) {
Math.max
}
println(max(2, 5, 3, 7, 1, 6))

foldLeft是TraversableOnce类的一个方法。上面的代码实现了从一个集合中获取最大数值的方法。

代码执行结果如下图:

不过和java不同的是,我们不能将一个数组中的元素当做变长参数直接传递给方法,下面代码执行就会报错:

def max(values: Int*) = values.foldLeft(values(0)) {
Math.max
}
val numbers = Array(2, 5, 3, 7, 1, 6)
println(max(numbers))

执行结果:

如果想使用数组中的元素作为变长参数,可以将数组展开成为离散值:需要使用“:_*”符号组合:

val numbers = Array(2, 5, 3, 7, 1, 6)
println(max(numbers:_*))

执行结果:

在这一节里出现了两个新的概念:函数(foldLeft)和数组(numbers)。尤其是函数,现在读起来有些困难。不过很快就可以接触到了。

#####

scala学习手记21 - 传递变长参数的更多相关文章

  1. Python函数中*args和**kwargs来传递变长参数的用法

    参考自: http://www.jb51.net/article/78705.htm 单星号形式(*args)用来传递非命名键可变参数列表.双星号形式(**kwargs)用来传递键值可变参数列表. 1 ...

  2. scala学习手记27 - 下划线与参数

    在Scala里,下划线(_)可以表示函数值的参数.如果某个参数在函数里仅使用一次,就可以用下划线表示.每次在函数里用下划线,都表示随后的参数. val arr = Array(1, 2, 3, 4, ...

  3. 【小白学Lua】之Lua变长参数和unpack函数

    一.简介 Lua的变长参数和unpack函数在实际的开发中应用的还挺多的,比如在设计print函数的时候,需要支持对多个变量进行打印输出,这时我们就需要用到Lua中的变长参数和unpack函数了. 二 ...

  4. Scala 变长参数

    如果Scala定义变长参数 def sum(i Int*), 那么调用sum时,可以直接输入sum(1,2,3,4,5) 但是不可以sum(1 to 5) 必须要将1 to 5 强制为seq sum( ...

  5. C++中的变长参数

    新参与的项目中,为了使用共享内存和自定义内存池,我们自己定义了MemNew函数,且在函数内部对于非pod类型自动执行构造函数.在需要的地方调用自定义的MemNew函数.这样就带来一个问题,使用stl的 ...

  6. 《OOC》笔记(3)——C语言变长参数va_list的用法

    <OOC>笔记(3)——C语言变长参数va_list的用法 C语言中赫赫有名的printf函数,能够接受的参数数目不固定,这就是变长参数.C#里也有params这个关键字用来实现变长参数. ...

  7. c(++)变长参数之整形(非字符串类型类似)

    0.序言 变长参数,接触的第一个可变长参数函数是 printf   , 然后是 scanf   .他们的原型如下: printf: _Check_return_opt_ _CRT_STDIO_INLI ...

  8. C++11变长参数模板

    [C++11变长参数模板] C++03只有固定模板参数.C++11 加入新的表示法,允许任意个数.任意类别的模板参数,不必在定义时将参数的个数固定. 实参的个数也可以是 0,所以 tuple<& ...

  9. 【Unix环境高级编程】编写变长参数函数

    文件的格式输入输出函数都支持变长参数.定义时,变长参数列表通过省略号'...'表示, 因此函数定义格式为: type 函数名(parm1, parm2,parmN,...); Unix的变长参数通过v ...

随机推荐

  1. finereport---FineReport入门常见疑难点

    一.入门介绍 二.入门需知 注意:开发人员可以设置DEBUG级别,有助于测试 三.数据准备 数据集sql中可以使用参数宏${}动态地生成过滤条件,${}中的语句在FineReport报表中执行,将${ ...

  2. 7.javascript如何调试代码

    http://www.cnblogs.com/youring2/archive/2012/08/08/2624093.html

  3. nodejs unit test related----faker-cli, sinonjs, mock/stub

    http://www.tuicool.com/articles/rAnaYvn http://www.tuicool.com/articles/Y73aYn (contrast stub and mo ...

  4. Spring4学习笔记-AOP(基于配置文件的方式)

    原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 .作者信息和本声明.否则将追究法律责任.http://shamrock.blog.51cto.com/2079212/1557743 引 ...

  5. pdb

    core code: import pdb pdb.set_trace() 单步执行并进入:s 单步执行并不进入:n 下一断点:c 当前位置:where 从当前函数返回:r 退出:q pdb comm ...

  6. CNI插件实现框架---以loopback为示例

    以最简单的loopback插件作为实例,来分析CNI plugin的执行流程 // cni/plugins/loopback/loopback.go 1.func main() main函数只是简单地 ...

  7. Hadoop2.0中单点故障解决方案总结---老董

    Hadoop 1.0内核主要由两个分支组成:MapReduce和HDFS,众所周知,这两个系统的设计缺陷是单点故障,即MR的JobTracker和HDFS的NameNode两个核心服务均存在单点问题, ...

  8. python16_day16【Django_ORM、模板】

    一.ORM 1.MySQL配置 DATABASES = { 'default': { 'ENGINE': 'django.db.backends.mysql', 'NAME': 'books', #你 ...

  9. django基础2: 路由配置系统,URLconf的正则字符串参数,命名空间模式,View(视图),Request对象,Response对象,JsonResponse对象,Template模板系统

    Django基础二 request request这个参数1. 封装了所有跟请求相关的数据,是一个对象 2. 目前我们学过1. request.method GET,POST ...2. reques ...

  10. Delphi 正则表达式之TPerlRegEx 类的属性与方法(3): Start、Stop

    Delphi 正则表达式之TPerlRegEx 类的属性与方法(3): Start.Stop //设定搜索范围: Start.Stop var   reg: TPerlRegEx; begin   r ...