先来看一段Java中的循环:

for (int i = 1; i < 4; i++) {
System.out.print(i + ",");
}

毫无疑问,scala可以让这个循环更加简洁。根据上一节中的内容,没有必要显示指定变量i的类型,我们甚至不需要声明这个变量。其次输出的语句也可以更加简洁一些,在scala中可以直接使用println()这个方法输出字符串。最后scala的循环结构也是非常的轻量级。好了,可以看一下代码了:

for (i <- 1 to 3) {
print(i + ",")
}

在上面代码中的循环结构里,箭头(<-)左侧是一个val(注意不是var)变量,右侧是一个生成器表达式。和java中的循环不同,在这里的每次循环中都会创建一个新的val变量i(而非是给i赋值),用生成器表达式产生出来的连续值进行初始化。

生成器表达式“1 to 3”生成的连续值包含了下界[1]和上界[3],如果用until方法替换to方法后,就可以排除上界。

to和until都是scala的RichInt类的方法,调用1 to 3等价于1.to(3),但是前者更加优雅。在scala中,如果方法有0或1个参数,点和括号是可以丢掉的。如果方法的参数多于一个,那么就必须保留括号,但是点仍是可选的。再举一个在java中非常常见的表达式为例:1 + 2在scala中实际上就是1.+(2),+也是一个方法而非是简单的符号。

我们已经知道1 to 3返回的使一个连续值(Range),那么就可以考虑使用Range的foreach方法来实现循环。代码如下:

(1 to 3).foreach(i => print(i + ","))

foreach是Range类的一个方法,这方法以一个函数值作为参数。所以要在括号里提供一段函数代码接受一个实参。在这个例子里,实参就是i。箭头“=>”的作用是将左边的参数列表和右侧函数实现分割开来。

scala学习手记2 - scala中的循环的更多相关文章

  1. scala学习手记16 – scala中的static

    前面两节学了scala的对象和伴生对象,这两个在使用的时候很有些java的静态成员的意思. scala中没有静态字段和静态方法.静态成员会破坏scala所支持的完整的面向对象模型.不过可以通过伴生对象 ...

  2. scala学习手记23 - 函数值

    scala的一个最主要的特性就是支持函数编程.函数是函数编程中的一等公民:函数可以作为参数传递给其他函数,可以作为其他函数的返回值,甚至可以在其它函数中嵌套.这些高阶函数称为函数值. 举一个简单的例子 ...

  3. scala学习手记36 - 容器基础

    scala的容器包括Set.List和Map.三种容器的特征和Java中一样.scala为每种容器都提供了可变和不可变两种版本,分别位于scala.collection.mutable或scala.c ...

  4. scala学习手记6 - 字符串与多行原始字符串

    scala中的字符串类就是java中的java.lang.String类.不过scala也为String提供了一个富封装类:scala.runtime.RichString. scala可以将java ...

  5. [原创]Scala学习:编写Scala脚本

    scala支持脚本 1)在/opt/scala-script下创建一个文件hello.scala 编辑内容如下: $ hello ,this is the first scala script 2)运 ...

  6. scala学习手记38 - 方法命名约定和for表达式

    方法命名约定 之前在学习<运算符重载>一节时曾经说过一个方法命名约定:方法的第一个字符决定了方法的优先级.现在再说另一个命名约定:如果方法以冒号(:)结尾,则调用目标是运算符后面的实例. ...

  7. scala学习手记17 - 容器和类型推断

    关于scala的类型推断前面已经提到过多次.再来看一下下面这个例子: import java.util._ var list1: List[Int] = new ArrayList[Int] var ...

  8. scala学习手记8 - 自适应的默认做法

    scala有一些默认做法,会让代码更简洁.更易读写,下面列出了这样几个特性: 1. 支持脚本.scala支持脚本,因此无须将所有的代码都放到类里.如果脚本可以满足需求,就将代码放到一个脚本里,无须再创 ...

  9. scala学习手记5 - 元组与多重赋值

    假定要在一个方法中返回多个值.比如需要返回一个人的名.姓和邮箱地址.在Java中最常用的方法是定义一个Person类,其中包括相对应的字段:还有些不常用的方法就是返回一个集合或数组,拿到结果后再进行循 ...

随机推荐

  1. Windows如何使用Apache的ab工具进行网站性能测试(Apache服务器自带了ab压力测试工具,可以用来测试网站性能,使用简单方便)

    打开Apache服务器的安装路径,在bin目录中有一个ab.exe的可执行程序,就是我们要介绍的压力测试工具. 在Windows系统的命令行下,进入ab.exe程序所在目录,执行ab.exe程序.注意 ...

  2. 阿里巴巴Java开发规约IDEA插件安装及使用

    技术交流群:233513714   一.通过Jetbrains官方仓库安装 1. 打开 Settings >> Plugins >> Browse repositories.. ...

  3. HTTP 错误 500.21 - Internal Server Error 解决方案(转)

    不久前重新安装了Windows7,在安装了VS2010 开发平台之后,将网站发布到IIS,访问发生如下错误: HTTP 错误 500.21 - Internal Server Error处理程序“Ni ...

  4. 服务器1M带宽同时能承受多少人在线

    最近网站的流量一直在增长,这个肯定是好事.不过也有个麻烦的问题,目前本站用的的虚拟空间,每月流量30G,虽然95%的图片都已外链,但流量还是很吃紧,日均2000ip,4月份流量34g左右,单JS的响应 ...

  5. MyBatis 映射文件详解

    1. MyBatis 映射文件之<select>标签 <select>用来定义查询操作; "id": 唯一标识符,需要和接口中的方法名一致; paramet ...

  6. java基础09 数组的使用

    /** * 求数组中的最大值 */ @Test public void test14(){ //定义一个数组 参赛的选手 int [] nums={50,20,30,80,100,90}; //定义一 ...

  7. tagName()方法详解

    1.该方法可以通过元素的标签名称来查找元素.这个方法搜索到的元素通常不止一个,所以一般建议结合使用findElements方法来使用: driver.findElement(By.xpath(&quo ...

  8. Mysql实现企业级日志管理、备份与恢复

    数据备份形式 文件备份: 通过Linux的备份命令把文件统一打个包存起来,可存在本地和远程服务器,等到要恢复时,再用这些文件恢复到指定位置. 数据库数据备份: 在一些对数据可靠性要求很高的行业如银行. ...

  9. 使用jQuery重用form表单并异步提交到其它action

    在做页面开发的时候,有时候要重用表单的数据,并异步请求提交到其它的链接中,这个时候就能够使用jquery去改动表单的action值(记得使用后改动回来).并调用submit方法,当然后台的链接acti ...

  10. shell脚本调用传参【转载】

    转自:https://www.cnblogs.com/cisum/p/8010658.html 1.直接使用$0,$1,$2,$3 $0是脚本的名字,就是按顺序来 #!/bin/bash # auth ...