一、定义方法、函数、及方法转换为函数

  1.方法的定义:

    def  方法名(参数1:数据类型,参数2:数据类型...):返回值类型 ={

    }

  2.定义函数:

    val h1 = (a:Int,b:Int) => {a * b}

  3.方法转换为函数(在Windows下的命令行操作)

    def m2(a:Int,b:Int):Int =a + b

    m2 _

    然后系统生产:res6:(Int,Int) => Int =(function2) 

    注释:(function2)表示一个函数,并且有两个参数、  (Int,Int)代表参数列表

  **方法和函数的区别会单独用一片来整理

二、传值调用&传名调用

  什么是函数式编程?  A:方法的参数可以是一个函数的编程模型

  1.传值调用:方法传递的是值,详情见如下代码: 

object AntForest {
var energy = 1000 def getEnergy():Int={
energy += 50
energy
} def getManyEnergy(x: Int):Unit={
for(a <- 1 to 5){
getEnergy()
println(s"您现在的能量为:$x")
}
println(energy)
} def main(args: Array[String]): Unit = {
getManyEnergy(getEnergy())
}
}

  解释:先计算getEnergy的值,将值作为参数放在getManyEnery中使用
    输出结果:
     您现在的能量为:1050
     您现在的能量为:1050
     您现在的能量为:1050
     您现在的能量为:1050
     您现在的能量为:1050
     1300

  2.传名调用:将方法作为函数被其他方法调用,详情见如下代码:

  

object AntForest {
var energy = 1000 def getEnergy():Int={
energy += 50
energy
} def getManyEnergy(x: => Int):Unit={
for(a <- 1 to 5){
getEnergy()
println(s"您现在的能量为:$x")
}
println(energy)
} def main(args: Array[String]): Unit = {
getManyEnergy(getEnergy())
}
}

  解释:将getEnergy作为函数被getManyEnergy调用
    输出结果:
     您现在的能量为:1100
     您现在的能量为:1200
     您现在的能量为:1300
     您现在的能量为:1400
     您现在的能量为:1500
     1500

二、可变参数函数与默认参数函数

  1.可变参数函数:

  Java中可变参数的函数:public static void m1(String...arg){ }

  Scala中可变参数函数:def sum(ints:Int*):Unit={ }

object manyPara {
def sum(ints:Int*):Int={
var sum = 0
for(v <- ints){
sum += v
}
sum
} def setName(params:Any*):Any={
return params
} def main(args: Array[String]): Unit = {
println(sum(1,3,5,7,9))    //25
println(setName("Wyh",23,"man"))  //WrappedArray(Wyh, 23, man)
}
}

  2.默认参数函数:

  如果传递了参数,测试用传递的值。如果不传递参数,测试用默认值

  

object defaultParam {
def sum(a:Int=3,b:Int=7):Int={
a+b
} def main(args: Array[String]): Unit = {
println(sum()) //10
println(sum(1,5)) //6
}
}

  

三、高阶函数

  定义:将其他函数作为参数,或其结果是函数的函数 

object higherOrderFunction {
def getPerson(h:Int => String,f:Int):String={
h(f)
}
def Person(x:Int):String= "我是" + x.toString + "岁的帅哥" def main(args: Array[String]): Unit = {
println(getPerson(Person,18))
}
}

  解释:其中getPerson方法的参数为一个函数h、一个变量f,执行体为参数为f的函数h,h(f),

    在main方法中getPerson方法将Person方法变为函数,与变量18作为参数,

  执行输出:我是18岁的帅哥

四、字符串的格式化输出

  常规输出方式:val name = "hunter" 

         var age = 18

         println("name:" + name ",age:" + age)

  格式化输出:文字插值器(f、s)

    println(f"name = $name,age = $age")  println(s"name = $name. age = $age")

    println(f"1 + 1 = ${1+1}")        println(s"1 + 1 = ${1+1}")

五、部分参数应用函数

  如果函数传递所有预期的参数,则表示完全应用了它;

  如果只传递了所有参数当中的几个,那么见返回部分应用的函数。

  eg.命令行操作:

    val sum = (a:Int,b:Int) => a+b

    val sum1 = sum(1,_:Int)

    println(sum1(4))    //输出5

  代码例子如下:

import java.util.Date

object PartParam extends App {
def log(date:Date,message:String):Unit={
println(s"$date,$message")
} val date = new Date() val longMessage = log(date,_:String) log(date,message = "HelloHunter")  //Wed Jan 09 18:36:51 CST 2019,HelloHunter
longMessage("rebahenmei")      //Wed Jan 09 18:36:51 CST 2019,rebahenmei
}

  解释:1.使用日期Date要导入java的util包。

     2.App为Scala中的一个特质,可以不写main方法直接运行程序(如Java中的Test、Before)

六、柯理化

  将原来接受的两个参数的函数变为一个新的接收一个参数的函数的过程叫做柯理化

  eg.

    def sum(a:Int,b:Int) = a+b

    def sum(s:Int)(b:Int) = a+b

  这两个方法是等价的。柯理化可将函数的通用性降低,适用性提高。

  通用性:适用于所有或者很多的情况

  适用性:适用于一种或几种的情况

七、偏函数

  被包裹在花阔内没有match的一组case语句,是一个偏函数

  PartialFunction[A,B]

  A;参数类型    B:返回值类型

  偏函数常用于模式匹配

object PartialFunction {
def func1(str:String):Int={
if (str.equals("hunter")) 32 else 18
} def func2:PartialFunction[String,Int]={
//使用偏函数必须使用case
case "hunter" => 32
case _ => 18
} def main(args: Array[String]): Unit = {
println(func1("hunter"))  // 32
println(func1("Wyh"))    //18
println(func2("hunter"))  //32
println(func2("Wyh"))    //18
}
}

  偏函数类似于Java中的swtich/case语句。

scala-Unit-3-Scala基础语法2的更多相关文章

  1. Spark入门到精通--(第二节)Scala编程详解基础语法

    Scala是什么? Scala是以实现scaleable language为初衷设计出来的一门语言.官方中,称它是object-oriented language和functional languag ...

  2. Scala - 快速学习03 - 基础语法

    1- 变量 变量 mutable variable 在程序运行过程中其值可能发生改变的量 关键词var定义变量,定义时直接进行求值 常量 immutable variable 在程序运行过程中其值不会 ...

  3. Scala(二)——基础语法(与Java的区分)和函数式编程

    Scala快速入门(二) 一.键盘输入 关于基本类型的运算,以及复制运算,条件运算,运算符等知识,均和Java语言一样,这里不过多叙述. val name = StdIn.readLine() Std ...

  4. Scala学习教程笔记一之基础语法,条件控制,循环控制,函数,数组,集合

    前言:Scala的安装教程:http://www.cnblogs.com/biehongli/p/8065679.html 1:Scala之基础语法学习笔记: :声明val变量:可以使用val来声明变 ...

  5. 【Scala学习之一】 Scala基础语法

    环境 虚拟机:VMware 10 Linux版本:CentOS-6.5-x86_64 客户端:Xshell4 FTP:Xftp4 jdk1.8 scala-2.10.4(依赖jdk1.8) spark ...

  6. Scala简介及基础语法

    一.scala简介 官网:https://www.scala-lang.org/ Scala语言很强大,集成了面向对象和函数式编程的特点. 运行在JVM(jdk). 大数据中为什么学习scala? s ...

  7. 1.scala基础语法总结

    Scala基础语法总结:Scala 与 Java 的最大区别是:Scala 语句末尾的分号 ; 是可选的.如果一行里写多个语句那么分号是需要的 val s = "菜鸟教程"; pr ...

  8. Scala学习(一)——基础语法

    Scala语言是一种面向对象语言,结合了命令式(imperative)和函数式(functional)编程风格,其设计理念是创造一种更好地支持组件的语言. 特性 多范式(Multi-Paradigm) ...

  9. Scala基础语法 (一)

    如果你之前是一名 Java 程序员,并了解 Java 语言的基础知识,那么你能很快学会 Scala 的基础语法. Scala 与 Java 的最大区别是:Scala 语句末尾的分号 ; 是可选的. 我 ...

  10. Scala入门系列(一):基础语法

    Scala基础语法 Scala与JAVA的关系 Scala是基于Java虚拟机,也就是JVM的一门编程语言,所有Scala的代码都需要经过编译为字节码,然后交由Java虚拟机来运行. 所以Scala和 ...

随机推荐

  1. IBM X 3650 M3服务器RAID0设置

    1 进入磁盘整列设置窗口 1.1 开机在提示符页面下按[F1]进入BIOS设置 1.2 依次进入子菜单[System Settings]à[Adapters and UEFI Drivers] 1.3 ...

  2. sleep()和wait()的区别及wait方法的一点注意事项

    一.查看API sleep是Thread类的方法,导致此线程暂停执行指定时间,给其他线程执行机会,但是依然保持着监控状态,过了指定时间会自动恢复,调用sleep方法不会释放锁对象. 当调用sleep方 ...

  3. 访问 Confluence 6 的计划任务配置

    希望访问 Confluence 计划任务配置界面: 进入  > 基本配置(General Configuration) > 计划任务(Scheduled Jobs) 所有的计划任务将会按照 ...

  4. mysql老是停止运行该怎么解决

    你可能还会遇到无法启动mysql的错误 解决方法如下:

  5. ActiveMQ消息的发送原理

    持久化消息和非持久化消息的发送策略:消息同步发送和异步发送 ActiveMQ支持同步.异步两种发送模式将消息发送到broker上.同步发送过程中,发送者发送一条消息会阻塞直到broker反馈一个确认消 ...

  6. BeautifulSoup的基本操作

    >>> from bs4 import BeautifulSoup   #导入 >>> soup = BeautifulSoup(url.content," ...

  7. Metasploit渗透测试模块(一)

    1.Metasploit模块加载 初始化界面,成功要加载数据库 查看 Metasploit中已近存在的漏洞模块使用 show payloads

  8. ConfigurationManager 类的使用

    一.引用 命名空间:   System.Configuration程序集:  System.Configuration(位于 System.Configuration.dll) 二.示例 1.读取.增 ...

  9. hdfs数据到hive中,以及hdfs数据隐身理解

    hdfs数据到hive中: 假设hdfs中已存在好了数据,路径是hdfs:/localhost:9000/user/user_w/hive_g2park/user_center_enterprise_ ...

  10. C#算法 选择排序、冒泡排序、插入排序

    1.冒泡排序: 方法一: public static int[] MaoPao(int[] arr) { //执行多少次 for (int i = 0; i < arr.Length; i++) ...