快速入门Scala④ 方法与函数操作

定义语法:

默认参数、带名参数、变长参数

def methodName (参数名:参数类型, 参数名:参数类型) : [return type] = {
   
// 方法体:一系列的代码
}

  • 参数列表的参数类型不能省略
  • 返回值类型可以省略,有scala编译器自动推断
  • 返回这可以不写return,默认就是{}快表达式的值

实例:

  1. 定义一个方法,实现两个整数值相加,返回相加后的结果
  2. 调用该方法
scala> def add(a:Int,b:Int)=a+b
add: (a: Int, b: Int)Int
scala> add(1,2)
res1: Int = 3

返回值类型推断

scala定义方法可以省略返回值,有scala自动推断返回类型

·示例

定义递归方法(求阶乘)

10 * 9 * 8 * 7 * 6 * ... * 1

def m2(x: Int): Int = {
    if (x <= 1) {
      1
    } else m2(x - 1) * x
  }

方法参数

scala中的方法参数,使用比较灵活。他支持以下几种类型的参数:

  • 默认参数
  • 带名参数
  • 变长参数

默认参数

在定义方法是可以给参数定义一个默认值。

scala> def add(num:Int=0,num2:Int=0)={
  num+num2
}

带名参数

在调用方法时,可以指定参数的名称来进行调用

def add(num:Int=0,num2:Int=0)={
  num+num2
}
scala> add(num2 = 2)

变长参数

如果方法的参数是不固定,可以定义一个方法的参数是变长参数。

def 方法名(参数名:参数类型*):返回这类型={

方法体

}

在参数类型后面加一个*号,表是参数可以有0到多个

scala> def add(num:Int*)={
  num.sum
}
scala>  add(1,2,3,4)
res0: Int = 10

方法调用

在scala中,有一下几种方法调用方式

  • 后缀调用法
  • 中缀调用法
  • 花括号调用法
  • 无括号调用法

后缀调用法

语法: 对象名.方法名(参数)

示例: 使用后缀法 Math.abs 求绝对值

scala> Math.abs(-1)
res2: Int = 1

中缀调用法

语法 对象名 方法名 参数

例如:1  to 10  (如果有多个参数,使用括号括起来)

使用中缀法Math.abs 求绝对值

scala> Math abs(-1)
res3: Int = 1

花括号调用法

语法:

Math.abs{
// 表达式1
// 表达式2
}

方法只有一个参数,才能使用花括号调用法

示例:

使用化括号调用方法Math.abs 求绝对值

scala> Math abs {-1}
res4: Int = 1

无括号调用方法

如果方法没有参数,可以省略方法名后面的括号

示例:

  • 定义一个无参数的方法,打印"hello"
  • 使用无括号调用该方法
scala> def m3()=println("hello")
m3()

语法:

val 函数变量名=(参数名:参数类型,参数名:参数类型....)=>函数体

  • 函数是一对象(变量)
  • 类似于方法,函数也有输入参数和返回值
  • 函数定义不需要使用得分def定义
  • 无需指定返回值类型
scala> val add=(x:Int,y:Int) =>x+y
add: (Int, Int) => Int = <function2>
scala> add(1,2)
res5: Int = 3

方法和函数的区别

  • 方法是隶属于类或者对象的,在运行时,他是加载到JVM的方法区中
  • 可以将函数对象赋值给一个变量,在运行时,他加载到JVM的堆内存中
  • 函数是一个对象,继承与functionN,函数对象有apply,curried,tostring,tupled这些方法。方法则没有

方法转换为函数

  • 有时候需要将方法转换为函数,作为变量传递,就需要将方法转为函数
  • 使用_即可将方法转换为函数
    scala> def add(x:Int,y:Int)=x+y
    add: (x: Int, y: Int)Int
    scala> val a = add  _
    a: (Int, Int) => Int = <function2>
    

    11

发布了88 篇原创文章 · 获赞 99 · 访问量 21万+

猜你喜欢

转载自blog.csdn.net/qq_43791724/article/details/105131333