前一节我们简单说明了scala中的while的循环,现在说说scala中的foreach遍历。
scala中的for和foreach和java中的一样的。现在我们简单实用一下:
1.创建一个scala的脚本,例如:scala-for-foreach.scala,脚本中的代码如下:
args.foreach(arg => println(arg)) 利用foreach进行遍历
我们执行这个脚本
C:\Users\xuanyi>scala D:/scala/scala-script/scala-for-foreach.scala scala is goo
d tony
运行结果为:
scala
is
good
tony
这个只是简单的使用,我们可以将上面的代码改变为:
args.foreach((arg :String) => println(arg))
arg :String:说明arg中元素的类型为String的类型
因此我们调用方法(function)的使用可以这样使用
(x:Int,y:Int) => x + y
(x:Int,y:Int):代表方法的传递参数
x + y:表示方法体
总而言之,函数文字的语法是一个命名参数列表,在括号中是一个右箭头,然后是函数的主体。
现在,这一点您可能想知道发生了什么你已经习惯了那些可靠的循环使用命令式语言比如Java或c .为了引导你在功能方向,只有一个功能相对必要的(称为表达式)在Scala中可用。
我们现在使用for循环的方式:
for(arg <- args){
print(arg + " ");
}
我们将以上的代码,加到上面脚本文件中的后面,保存运行,运行的结果:
scala
is
good
tony
scala is good tony
我们看for和java中的不一样,这是scala中独有的for循环。
for循环在array中的使用:
var greetStrings = new Array[String](3)
greetStrings(0) = "Hello "
greetStrings(1) = ", "
greetStrings(2) = "world"
for(i <- 0 to 2)
print(greetStrings(i))
创建一个长度为3的字符串数组,使用for进行遍历,打印每一项的值。
我们制定greetStrings可以制定相关的类型,如下:
var greetStrings:Array[String] = new Array[String](3)
这里要注意,scala中的数组下标和java一样从零开始,但是java取值的时候用[ index ],和scala不同的是scala用(index).
for(i <-0 to 2)
print(greetStrings(i))
如果一个方法只接受一个参数,那么可以不带点或括号调用它。这个例子中的to实际上是一个只接受一个Int参数的方法。代码0到2被转换为方法调用(0).to(2)。注意,只有显式指定方法调用的接收方时,这种语法才有效。
此示例说明的另一个重要想法将为您提供见解为什么在Scala中使用括号访问数组的原因。 Scala的数量更少特殊情况比Java。 数组就像任何其他类一样只是类的实例Scala中的类。 在围绕一个或多个值应用括号时对于变量,Scala会将代码转换为方法的调用命名适用于该变量。 所以greetStrings(i)变成了greetStrings.apply(i)中。 因此,在Scala中访问数组的元素只是一个方法调用就像任何其他方法。 这个原则不仅限于此数组:对象在括号中的某些参数的任何应用都将转换为apply方法调用。 当然这只会编译如果该类型的对象实际上定义了一个apply方法.
所以当运行1+2的时候,在scala中是这样的,(1).+(2)的形式执行的。
类似地,当对一个变量进行赋值时,应用括号和一个或多个参数,编译器将把该赋值转换为对update方法的调用,该方法将括号中的参数和等号右侧的对象一并调用
greetStrings(0) = "Hello " 运行的方式为greetStrings.update(0,"hello")
println(greetStrings(0)) 运行当时为greetStrings.apply(0)
我们可以这样声明一个数组:
val numNames = Array("one","two","four")
也可以这样声明
val numNames = Array.apply("one","two","four")
这里是调用scala Array的工程方法apply进行声明,创建并返回一个新的数组。