scala中的方法 た 入场券 2022-06-01 04:40 143阅读 0赞 # scala中的方法 # 在OOP中,方法作用于对象,是对象的行为,在Scala中的方法也是如此。 ## 方法定义 ## 定义方法的基本格式是: def 方法名称(参数列表):返回值 = 方法体 scala中方法的返回值默认是方法体重的最后一行表达式 的值,当然也可以用return来执行返回值,但scala并不推荐这么做。 def function1(param1: String, param2: Int): String = { "[" + param1 + "]" + ",[" + param2 + "]" } def function2(param1: String, param2: String): String = { return "[" + param1 + "]" + ",[" + param2 + "]" } scala提供一些强大的功能:类型推断。在定义方法时,可以不显式 的制定方法的返回值,scala编译器可以根据函数体中的具体内容来推断方法的返回值类型 //返回类型被定义为String def function2(param1: String, param2: String) = { "[" + param1 + "]" + ",[" + param2 + "]" } 需要注意的是,若使用return来制定函数的返回值,次数scala的类型推断将会失效,次数必须显式执行返回值类型。 def function2(param1: String, param2: String) = { //编译时报错 return "[" + param1 + "]" + ",[" + param2 + "]" } def function2(param1: String, param2: String): String = { //通过编译 return "[" + param1 + "]" + ",[" + param2 + "]" } 方法也可以没有返回值(返回值是Unit),类似于Java的void。 def function3(param1: String, param2: Double) { println("param1:" + param1 + ", param2: " + param2) } def function4(param1: String, param2: String): Unit = { println("param1:" + param1 + ", param2: " + param2) } ## 默认参数和带名参数 ## 在定义方法参数时,可以为某个参数指定默认值,带有默认值的参数在被调用时可以不为其传入实参。 def function5(left: String = "<", content: String, right: String = ">"): Unit ={ println(left + content + right) } 上面定义的方法中,参数left和right已经指定默认值,可以用下面的方式进行调用 funciton5(content = "abcd") 这里有一点需要注意,当未被指定默认值的参数不是第一个参数时,参数名称不能省略,这和其他语言的特性是一样的 funciton5("abcd") // "abcd"被赋给了left,而content是没有值的。 当向方法中传入实参时,执行参数名称,则传入实参的顺序可以与定义时指定的参数顺序不一致 function5(right="]", left="[", content="abcd") 若不制定参数的名称,则必须按照方法的参数列表顺序进行传参 function5("[", "abcd", "]") ## 可变参数 ## 当方法需要多个相同类型的参数时,可以用可变参数简化方法的定义 //从左到右拼接字符串 def function6(strs: String*): String = { strs.reduceLeft( _ + _) } 此处strs是一个Seq\[String\] def function7(values: Int*): Int = { values.reduceRight(_ + _) } function7(1 to 10:_*) *此处的 :\_*是将一个Range转成一个Seq
还没有评论,来说两句吧...