ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

scala函数整理

2021-11-15 20:01:03  阅读:155  来源: 互联网

标签:函数 scala Int println addInt 整理 返回值 def


spark中函数和方法定义虽然差不多,但是函数要更加灵活,用的最多的是匿名函数写法,尤其在链式编程的时候尤为突出。

 

函数定义方法多样

1.规范化写法,scala 函数的返回值是最后一行代码;

def addInt(a:Int,b:Int) : Int = {
var total : Int = a + b

return total

}

2.不写明返回值的类型,程序会自行判断,最后一行代码的执行结果为返回值;

def addInt(a:Int,b:Int) = {
a+b

}


3。省略返回值类型和等于号,返回的是();

def addInt(a:Int,b:Int){
a+b


4.函数只有一行的写法;


def addInt (a:Int,b:Int) = x + y

 

上述这些都和方法的用法差不多,函数最主要的下面这种写法


5.最简单写法:def ,{ },返回值都可以省略,此方法在spark编程中经常使用。

val addInt = (x: Int,y: Int) => x + y 
表示定义函数 addInt ,输入参数有两个分别为x,y,且均为Int类型,返回值为两者的和,类型为Int
这种写法也叫匿名函数

object ClassTest{
  def main(args:Array[String]):Unit={
    var func = (x:Int)=> {  //或者直接(x:Int)=>x+3
      x+3
    }
    println(func(3))
  }
}

 

闭包:就是函数的嵌套,即在定义一个函数的时候,包含了另外一个函数的定义,在内函数中,可以访问外函数的变量

  def func(n:Int):Int={
    var i=10
    var InnerFunc=(x:Int)=>x * i
    return InnerFunc(n)
  }
  
  def main(args:Array[String]):Unit={
    println(func(3))
  }

这里我们引入一个自由变量 i,这个变量定义在闭包函数外面。

这样定义的函数变量 InnerFunc 称为一个"闭包",因为它引用到函数外面定义的变量,定义这个函数的过程是将这个自由变量捕获而构成一个封闭的函数。

 

函数的柯里化

函数的柯里化是指将原来是多个参数的函数变为一个参数的过程,但是这个一个参数的函数返回的是以第二参数为参数的匿名函数:

可以看这篇博客的详细说明

https://zhuanlan.zhihu.com/p/98096436

 

懒惰函数

当函数返回值被声明为lazy时,函数的执行将被推迟,直到我们首次对此取值,该函数才会执行。这种函数我们称之为惰性函数。

2)案例实操

package com.atguigu.chapter5

object TestFunction14 {
def main(args: Array[String]): Unit = {

lazy val res = sum(10, 30)
println("-----------")
println("res=" + res)
}

def sum(n1: Int, n2: Int): Int = {
println("sum被执行")
return n1 + n2
}

}

输出结果:
-----------
sum被执行
res=40

标签:函数,scala,Int,println,addInt,整理,返回值,def
来源: https://www.cnblogs.com/xstCoding/p/15557979.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有