Scala 函数和方法的定义与使用

简介:

摘要:

函数是一组一起执行一个任务的语句。 您可以把代码划分到不同的函数中。如何划分代码到不同的函数中是由您来决定的,但在逻辑上,划分通常是根据每个函数执行一个特定的任务来进行的。

Scala 有函数和方法,二者在语义上的区别很小。Scala 方法是类的一部分,而函数是一个对象可以赋值给一个变量。换句话来说在类中定义的函数即是方法。

我们可以在任何地方定义函数,甚至可以在函数内定义函数(内嵌函数)。更重要的一点是 Scala 函数名可以有以下特殊字符:+, ++, ~, &,-, -- , \, /, : 等

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
函数的声明格式 :
def  functionName ([参数列表])  :  [ return  type ]
案例 :
object  Function {
 
   def  main(args :  Array[String]) :  Unit  =  {
     println(fun 01 ( 10 ))  //函数的调用
     println(fun 02 ( 10 20 ))  //函数的调用
 
     //函数作为参数传给方法:
     val  res  =  method 02 ( 10 , fun 02 )
     println(res)
 
   }
 
   //函数的定义:val/var 函数名称=(函数的参数列表)=>函数体
   val  fun 01  =  (a :  Int)  = > a +  10
 
   //定义函数,有两个Int类型的参数
   val  fun 02  =  (a :  Int, b :  Int)  = > {
     if  (a >  10  || b >  10 ) a + b  else  a - b
   }
 
 
   //  方法和函数的区别:
   //  在函数式编程语言中,函数是“头等公民”,它可以像任何其他数据类型
   // 一样被传递和操
 
 
   //定义一个求和的函数
   val  fun _ sum  =  (x :  Int, y :  Int)  = > x + y
 
 
   //函数f的参数个数为1,函数f的参数的数据类型为Int,函数f的返回值是Int
   def  method 00 (a :  Int, f :  Int  = > Int)  =  {
     a + f( 10 )
   }
 
 
   def  method 00 (a :  Int, b :  Int, c :  Int)  =  {
     //调用函数f对10和5求和之后,再和参数a求和
     a + b + c
   }
 
   //函数f的参数个数为2,函数f的参数的数据类型都为Int,函数f的返回值是Int
   def  method 02 (a :  Int, f :  (Int, Int)  = > Int)  =  {
     //调用函数f对10和5求和之后,再和参数a求和
     var  =  10
     var  =  5
     val  fvalues  =  f(x, y)  //调用函数实现对10与5的和
     a + fvalues
   }
 
 
}

 /**

  *  方法的声明和使用

  */

  

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
object  Method {
 
   def  main(args :  Array[String]) {
     //调用:method01()或者method01
     //    method01
     //    method03
     println(method 05 ( "method05" 20 ))
   }
 
 
   /**
     * 使用def定义一个方法
     * 方法的定义:def 方法名(参数列表):返回值={方法体}
     */
   //def method07= 10
 
   def  method 01 () :  Unit  =  println( "this is my first method" )
 
 
   /**
     * 如果没有参数、可以直接不用写()
     */
   def  method 02  =  println( "this is my first method" )
 
 
   /**
     * 如果没有参数、不确定返回值数据类型时
     */
   def  method 03  =  {
     println( "this is my first method" )
   }
 
   /**
     * 指定方法的返回数据类型,方法的最后一个表达式作为方法的返回值
     */
   def  method 04 :  String  =  {
     "this is my first method"
   }
 
   /**
     * 当方法需要传入参数是时:
     *
     * @return
     */
   def  method 05 (str :  String, age :  Int) :  String  =  {
     //把参数传入字符串里
     s "$str method,and age=$age"
   }
 
}

// 方法的参数列表  常用的参数有默认参数,带名参数和可变参数

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
object  MethodArgment {
 
   def  main(args :  Array[String]) {
     //调用默认参数:
     method 01 ( "xingyue" 20 "nan" )
     //  或者
     method 01 ( "qingyuan" , 22  )
 
     println( "-----------------------------" )
 
     //正常传递参数,根据参数列表顺序传递
     method 02 ( "laozhang" 40 )
     //scala的带名参数:
     method 02 (age  =  40 , name  =  "laozhang" )
 
     println( "----------可变参数-------------------" )
     method 03 ( 10 20 30 40 100 1000 )
 
   }
 
   /**
     * 默认参数
     * //我们在调用方法的时候,在某些情况下,没给参数,这个时候,
     * 方法会使用默认的一个参数,但是这个参数从哪里来?? 我在定义方法的时候就给了这个默认参数
     * //当我们给的参数不够的时候,会自动的依次补齐默认参数
     *
     * @param name
     * @param age
     * @param sex
     */
   def  method 01 (name :  String, age :  Int, sex :  String  =  "nan" ) :  Unit  =  {
     val  info  =  s "your name is $name,and age is $age,and sex is $sex"
     println(info)
 
   }
 
   /**
     * 带名参数:在调用函数的时候,我们不按照函数的定义参数列表来传递参数,
     * 使用的是带名参数的方式来传递
     *
     * @param name
     * @param age
     */
   def  method 02 (name :  String, age :  Int) :  Unit  =  {
     val  info  =  s "your name is $name,and age is $age"
     println(info)
 
   }
 
 
   /**
     * 可变参数:在定义函数时,可能无法确认出到底有多少个参数,可以用变长参数的形式来定义函数
     *
     * @param argInt
     */
   def  method 03 (argInt :  Int*) :  Unit  =  {
 
     //变量可变参数遍历方式1
     for  (arg <- argInt.iterator)
       println(arg)
 
     //变量可变参数遍历方式2
     for  (arg <- argInt)
       println(arg)
 
   }
 
   def  method 04 (age :  Int, str :  String*) :  Unit  =  {
 
     //变量可变参数遍历方式1
     for  (arg <- str.iterator)
       println(age +  ":"  + arg)
 
     //变量可变参数遍历方式2
     for  (st <- str)
       println(age +  ":"  + st)
 
   }
 
}
本文转自   ChinaUnicom110   51CTO博客,原文链接:http://blog.51cto.com/xingyue2011/1942157
相关文章
|
7月前
|
分布式计算 Scala Spark
Scala【集合常用方法和函数操作(下)】
Scala【集合常用方法和函数操作(下)】
|
7月前
|
分布式计算 Scala Spark
Scala 【集合常用方法和函数操作-上】
Scala 【集合常用方法和函数操作-上】
|
27天前
|
Java Scala
Scala 方法与函数
Scala 方法与函数
21 1
|
5月前
|
前端开发 Scala
Scala并发编程的react、loop方法详解
在这个例子中,`MyActor`会无限循环接收和处理消息。当收到一个字符串消息时,它会打印出"Received: "加上消息内容。如果收到其他类型的消息,它会打印"Unknown message"。
30 1
|
6月前
|
前端开发 Scala
Scala并发编程的react、loop方法详解
在这个例子中,`MyActor`会无限循环接收和处理消息。当收到一个字符串消息时,它会打印出"Received: "加上消息内容。如果收到其他类型的消息,它会打印"Unknown message"。
34 0
|
6月前
|
Scala
【收藏】Scala常用方法(笔记)
【收藏】Scala常用方法(笔记)
48 0
|
7月前
|
编译器 Scala
认识scala中的函数
认识scala中的函数
67 5
|
7月前
|
Scala 容器
Scala学习--day04--集合、常用方法、案例实操 - WordCount TopN、不同省份的商品点击排行
Scala学习--day04--集合、常用方法、案例实操 - WordCount TopN、不同省份的商品点击排行
111 2
|
7月前
|
Scala
Scala中的类和对象:定义、创建和使用
Scala中的类和对象:定义、创建和使用
178 1
|
7月前
|
Scala
Scala函数和方法
Scala函数和方法
40 1