scala方法和函数

方法

1,定义方法的关键字,def 
格式: def 方法的名称(参数列表):返回值类型 = {方法体内容}
2,方法的返回值,最后一行的内容,如果是循环,那么返回值是 Unit
3,如果空参方法,定义的时候有(),调用的时候可以省略(),如果定义的时候没有(),调用方法的时候,不能加()
4,方法的返回值类型,可以省略,但是特殊情况下,必须加上:
4.1,方法有 return 关键字
4.2,递归调用的方法。
5,方法不能最为最终的表达式存在,(空参的方法调用除外) 

object ScalaMethod extends App {

  def sum(a:Int,b:Int): Int ={
    return a + b
  }
  val i: Int = sum(2,7)
  println(i)

}

如果有return关键字,必须要有返回值类型,否则报错

函数

和方法类似,基本能实现相同的功能
val| var 函数名称=(函数的参数列表) => 函数体

函数可以作为最终的表达式存在,返回的内容就是函数的签名
签名(函数的名称,函数的参数,函数的返回值类型)
这种定义方式不需要指定返回值类型,编译器会自动推断

方法和函数的区别


方法本质上,就是一种特殊的函数。
在函数式编程语言中,函数是“头等公民”,它可以像任何其他数据类型一样被传递和操作
函数可以当成值来进行传递,方法的参数和返回值都可以是函数。
函数和变量,类,对象, 是一个级别的。
区别和联系:
1,方法用 def 关键字定义,函数的标识 =>
2,方法不能作为最终的表达式存在,但是函数可以,返回函数的签名信息
3,方法和函数调用的时候都需要显示的传入参数
4,函数可以作为方法的参数,和返回值类型。

总结

1,方法的定义 使用 def 关键字 函数的定义 使用 =>
函数有两种定义方式 
val f = (x:Int,y:Int) => x + y
val f:(Int,Int) => Int = (x,y) => if(x>y) x else y
2,方法不能作为最终的表达式存在,但是函数可以作为最终的表达式存在,返回函数签名
函数签名:函数的名称,参数类型,返回值类型 函数的别名(函数参数个数)
3,方法和函数的调用,方法和函数可以相互调用。
方法名称(参数列表) 函数名称(参数列表)
无参的方法可以省略(),无参的函数不能省略括号
4,函数是一等公民,可以作为方法的参数和返回值类型。
函数作为方法的参数: 定义方法的时候,函数参数规范(函数的名称,参数类型,返回值类型),然后在调用方法的时候,传递的是一个已存在的函数,或者是一个匿名函数。
都要求传入的函数,必须满足定义的规范,使用匿名函数的时候,可以省略参数类型((x,y)=>x*y)
函数最为方法的返回值类型,当调用方法的时候,返回函数,传入参数进行函数的调用。
5,方法可以转化为函数,通过在方法名称 _ ,另外当方法的参数是一个函数的时候,满足条件的方法会被自动转换为函数,进行传递

方法中调用函数

package com.weiyi.scala

object MethodAndFunctionTest {
  //定义一个方法
  //方法 m2 参数要求是一个函数,函数的参数必须是两个 Int 类型
  //返回值类型也是 Int 类型
  def m1(f: (Int, Int) => Int) : Int = {
    f(2, 6)
  }
  //定义一个函数 f1,参数是两个 Int 类型,返回值是一个 Int 类型
  val f1 = (x: Int, y: Int) => x + y
  //再定义一个函数 f2
  val f2 = (m: Int, n: Int) => m * n
  //main 方法
  def main(args: Array[String]) {
    //调用 m1 方法,并传入 f1 函数
    val r1 = m1(f1)
    println(r1)
    //调用 m1 方法,并传入 f2 函数
    val r2 = m1(f2)
    println(r2)
  }
}

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
Scala中,函数(function)和方法(method)是有一些区别的。 1. 定义方式:函数是通过`val`关键字定义的值,而方法是通过`def`关键字定义的类成员。 2. 形式:函数是一个独立的值,可以直接赋值给变量,作为参数传递给其他函数,或者作为返回返回方法则是属于类或对象的成员,需要通过实例或者类名来调用。 3. 参数列表:函数的参数列表可以用括号包裹,也可以省略括号。方法的参数列表总是需要用括号包裹。 4. 调用方式:函数可以直接使用参数列表调用,而方法需要通过对象或者类名来调用。 5. 带有副作用:函数通常是纯函数(pure function),即没有副作用的函数方法可以有副作用,例如修改对象的状态或者打印输出等。 下面是一个示例来说明函数方法的区别: ```scala // 定义函数 val add: (Int, Int) => Int = (x, y) => x + y // 定义类,并定义一个方法 class MyClass { def multiply(x: Int, y: Int): Int = x * y } // 创建类的实例 val obj = new MyClass() // 调用函数 val result1 = add(3, 4) println(result1) // 输出: 7 // 调用方法 val result2 = obj.multiply(3, 4) println(result2) // 输出: 12 ``` 需要注意的是,Scala方法可以转换为函数,而函数不能直接转换为方法。可以使用方法引用(method reference)或者使用下划线(_)来将方法转换为函数。例如: ```scala val multiplyFunc: (Int, Int) => Int = obj.multiply val multiplyFunc2: (Int, Int) => Int = obj.multiply _ ``` 总的来说,函数方法Scala中有些许的差异,但在实际使用中,它们可以互相转换和配合使用,根据需要选择合适的方式。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

大数据私房菜

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值