首页 > 其他分享 >Scala多样的定义方法

Scala多样的定义方法

时间:2024-10-16 15:47:38浏览次数:11  
标签:函数 Scala Int def 一个 定义方法 var 多样 fn

标准定义

def sum(x: Int, y: Int): Int = {
  x + y
}

新方式:字面量方式

var sum1 = (x: Int, y: Int) => {
  x + y
}
// 简写1, 代码只有一句, 可以省略{ }
var sum2 = (x: Int, y: Int) =>  x + y
// 简写2, 形参可以使用占位符来代替
var sum3:(Int,Int) => Int = _ + _
// 注意:(Int,Int) => Int    表示一种类型,是一个函数,需要两个Int类型的参数,返回一个Int类型的结果

把函数当作参数来使用

// op 本身是一个函数,它的第一个参数是一个函数类型,(Int,Int) => Int 是一个类型
var op = (callback:(Int,Int)=>Int,x:Int,y:Int) =>{
  callback(x,y)
}

把函数当作返回值

def main(args: Array[String]): Unit = {
  // f是一个函数,它的返回值也是一个函数
  var f = (x:Int) =>{
    var fn = (y:Int) => x+y
    fn
  }

  var s =f(2)       // s 是一个函数
  var res = s(100)  // (y:Int) => 2+y
  println(res)      // 102
}

闭包 :

一个函数连同该函数的非局部变量的一个函数

def main(args: Array[String]): Unit = {
  // f是一个函数,它的返回值也是一个函数
  var f = (x: Int) => {
    // 对fn来说,x就是一个非局部变量。 x+fn 就会构成一个闭包结构
    var fn = (y: Int) => x + y
    fn
  }

  var s = f(2) // s 是一个函数
  var res = s(100) // 102
  var res1 = s(80) // 82
  println(res1)
}

部分应用函数 :

定义多个参数而只调用一个参数

def fn(x:Int,y:Int,z:Int)={
    println(x,y,z)
    x*y*z
  }
  def main(args: Array[String]): Unit = {
    // rs: 部分应用函数
    // _: 占位符
    var rs = fn(2,3,_)
    println(rs(4))
  }
}

小结:定义函数的方式

标准方式: def 函数名()

字面量方式: var fn = () =>

柯里化方式: def fn(x:Int,y:Int,z:Int) => {} 把多个参数分开,一个一个写

标签:函数,Scala,Int,def,一个,定义方法,var,多样,fn
From: https://blog.csdn.net/2301_80870395/article/details/142980588

相关文章

  • Scala 的链式风格
    Scala的链式风格通常指的是在代码中使用一系列的方法调用,这些方法调用通过点号(.)连接在一起,形成一条链。这种风格在函数式编程中非常常见,因为它可以提高代码的可读性和表达力。以下是一些Scala链式风格的示例:方法链:在对象上连续调用多个方法。valresult=someObject.met......
  • 识别图形验证码 (Scala 示例)
    安装所需依赖在你的build.sbt文件中添加以下依赖:scalalibraryDependencies+="org.scalaj"%%"scalaj-http"%"2.4.2"下载并保存验证码图片使用scalaj-http下载验证码图片并保存到本地:scalaimportscalaj.http._importjava.nio.file.{Files,Paths}objectCaptch......
  • Scala连接数据库(mysql,redis)
    1、Scala连接mysql数据库:importjava.sql.{Connection,DriverManager,PreparedStatement,ResultSet}objectmysqlConn{defmain(args:Array[String]):Unit={Class.forName("com.mysql.jdbc.Driver")valconn:Connection=DriverManager.getCon......
  • 网页内容获取:Scala自动化脚本的实现
    对于开发者和数据科学家来说,自动化获取网页内容是一个常见的需求。Scala,作为一种多范式编程语言,以其强大的函数式编程特性和并发处理能力,成为了编写高效自动化脚本的理想选择。本文将介绍如何使用Scala结合SeleniumWebDriver来自动化获取网页内容。为什么选择Scala?Scala......
  • AI智能写作风潮,未来写作方式更多样化
    AI智能写作风潮,未来写作方式更多样化随着科技的飞速发展,人工智能已经逐渐渗透到我们生活的方方面面。在写作领域,AI智能写作的出现,不仅引发了一场风潮,更是为未来的写作方式带来了无限的可能性。本文将探讨AI智能写作的兴起、其带来的变化,以及未来写作方式的多样化趋势。一、AI智......
  • AI智能写作风潮,未来写作方式更多样化
    AI智能写作风潮,未来写作方式更多样化随着科技的飞速发展,人工智能已经逐渐渗透到我们生活的方方面面。在写作领域,AI智能写作的出现,不仅引发了一场风潮,更是为未来的写作方式带来了无限的可能性。本文将探讨AI智能写作的兴起、其带来的变化,以及未来写作方式的多样化趋势。一、AI智......
  • 如何让你的Mac右键菜单栏更加的丰富多样
    Mac电脑的右键菜单栏不如Windows的丰富,虽然可以在系统设置一些常用功能,但是种类不够丰富,这对于一些用惯了Windows的人来说可以说是非常的不习惯,不管是工作使用还是日常使用来说都有一些影响,如何才能让Mac的右键菜单栏像Windows一样的丰富方便呢,超级右键替你解决这个问题可......
  • Scala基础知识点
    1.Scala编译后文件的后缀名为.class。2.Scala有两种类型的变量,一种是使用关键字var声明的变量,值是可变的;另一种是使用关键字val声明的变量,也叫常量,值是不可变的。3.Null是所有引用类型的子类型,主要用途是与其他JVM语言互操作,几乎不在Scala代码中使用。4.Scala中可以使用def......
  • Scala函数进阶
    (一)函数的字面量用语法1,语法为:(参数列表)=>{方法体}2,函数的字面量作用由于scala的函数字面量没有定义函数名,所以可以通过变量进行调用。另外,也可以通过参数的方式进行调用,关于这种方式的介绍将在scala的函数高阶中进一步说明,这里不在展开叙述。3,scala的函数字面简化第一......
  • redis scalable solution -- twemproxy
    twemproxyhttps://github.com/twitter/twemproxyAfast,light-weightproxyformemcachedandredistwemproxy(nutcracker)twemproxy(pronounced"two-em-proxy"),akanutcrackerisafastandlightweightproxyformemcachedandredisprotocol.......