程序语句的集合,类中定义的函数称之为方法。下面是方法的一个实例。
object add{
def addInt( a:Int, b:Int ) : Int = {
var sum:Int = 0
sum = a + b
return sum
}
}
可变参数:我们不需要指定函数参数的个数,可以向函数传入可变长度参数列表。通过在参数的类型之后放一个星号来设置可变参数(可重复的参数)。
object Test {
def main(args: Array[String]) {
printStrings("Runoob", "Scala", "Python");
}
def printStrings( args:String* ) = {
var i : Int = 0;
for( arg <- args ){
println("Arg value[" + i + "] = " + arg );
i = i + 1;
}
}
}
默认参数: scala可以为函数参数指定默认参数值,使用了默认参数,你在调用函数的过程中可以不需要传递参数,这时函数就会调用它的默认参数值,如果传递了参数,则传递值会取代默认值。
object Test {
def main(args: Array[String]) {
println( "返回值 : " + addInt() );
}
def addInt( a:Int=5, b:Int=7 ) : Int = {
var sum:Int = 0
sum = a + b
return sum
}
}
匿名函数:箭头左边是参数列表,右边是函数体。
var inc = (x: Int) => {x+1}
var x = inc(7) - 1
//定义一个函数,以函数作为参数输入
def f(func: String => Unit): Unit = {
func("gyt")
}
var fun = (name: String) => {println(name)}
f(fun)
传名调用:传递的不是具体的值,而是代码块。和一般的传值调用相比,每次使用传名调用时,解释器都会计算一次表达式的值。
def f1(): Int = {
println("f1被调用")
12
}
def f2(a: => Int): Unit = {
println(a)
println(a)
}
f2(f1())
至简原则:
(1)函数中的return可以省略,以最后一行代码作为代码块的返回值。
def f1(name: String): String = {
name
}
(2)如果函数体只有一行代码,可以省略花括号。
def f2(name: String): String = name
(3)如果编译器可以推断出来返回值,那么可以省略(:和返回值类型一起省略)。有意思的是,到这一步,scala函数的形式形如数学中的f(x) = y。
def f3(name: String) = name
(4)如果有return,则(3)不适用。
(5)如果返回值是Unit,可以省略等号和返回值,但是此时花括号不能省略。
def f4(name: String) {
println(name)
}
(6)如果函数没有参数,那么调用它的时候可以直接用函数名。不用加“()”。
闭包:如果一个函数,访问到它的外部(局部)变量的值,那么这个函数和它所处的环境,称为闭包。
柯里化:将原来接受两个参数的函数变成新的接受一个参数的函数的过程。新的函数返回一个以原有第二个参数为参数的函数。
object Test {
def main(args: Array[String]) {
val str1:String = "Hello, "
val str2:String = "Scala!"
println( "str1 + str2 = " + strcat(str1)(str2) )
}
def strcat(s1: String)(s2: String) = {
s1 + s2
}
}
字符串
在 Scala 中,字符串的类型实际上是 Java String,它本身没有 String 类。
序号 |
方法及描述 |
1 |
char charAt(int index)返回指定位置的字符 |
2 |
int compareTo(Object o)比较字符串与对象 |
3 |
int compareTo(String anotherString)按字典顺序比较两个字符串 |
4 |
int compareToIgnoreCase(String str)按字典顺序比较两个字符串,不考虑大小写 |
5 |
String concat(String str)将指定字符串连接到此字符串的结尾 |
6 |
boolean contentEquals(StringBuffer sb)将此字符串与指定的 StringBuffer 比较。 |
7 |
static String copyValueOf(char[] data)返回指定数组中表示该字符序列的 String |
8 |
static String copyValueOf(char[] data, int offset, int count)返回指定数组中表示该字符序列的 String |
9 |
boolean endsWith(String suffix)测试此字符串是否以指定的后缀结束 |
10 |
boolean equals(Object anObject)将此字符串与指定的对象比较 |
11 |
boolean equalsIgnoreCase(String anotherString)将此 String 与另一个 String 比较,不考虑大小写 |
12 |
byte getBytes()使用平台的默认字符集将此 String 编码为 byte 序列,并将结果存储到一个新的 byte 数组中 |
13 |
byte[] getBytes(String charsetName使用指定的字符集将此 String 编码为 byte 序列,并将结果存储到一个新的 byte 数组中 |
14 |
void getChars(int srcBegin, int srcEnd, char[] dst, int dstBegin)将字符从此字符串复制到目标字符数组 |
15 |
int hashCode()返回此字符串的哈希码 |
16 |
int indexOf(int ch)返回指定字符在此字符串中第一次出现处的索引 |
17 |
int indexOf(int ch, int fromIndex)返回在此字符串中第一次出现指定字符处的索引,从指定的索引开始搜索 |
18 |
int indexOf(String str)返回指定子字符串在此字符串中第一次出现处的索引 |
19 |
int indexOf(String str, int fromIndex)返回指定子字符串在此字符串中第一次出现处的索引,从指定的索引开始 |
20 |
String intern()返回字符串对象的规范化表示形式 |
21 |
int lastIndexOf(int ch)返回指定字符在此字符串中最后一次出现 |