设为首页 加入收藏

TOP

scala-Unit-3-Scala基础语法2(一)
2019-08-15 00:11:13 】 浏览:119
Tags:scala-Unit-3-Scala 基础 语法

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

  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"$
首页 上一页 1 2 下一页 尾页 1/2/2
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
上一篇scala字段权限问题 下一篇Spark-Unit2-Spark交互式命令行与..

最新文章

热门文章

Hot 文章

Python

C 语言

C++基础

大数据基础

linux编程基础

C/C++面试题目