zoukankan      html  css  js  c++  java
  • Scala--第二天

    一、Scala中有方法和函数俩种技术

      1.方法

         定义:def 方法名(参数名:参数类型,参数名:参数类型):[返回值类型] = {

              方法体

            }

         e.g:

     1     def test1(): Unit = {
     2       println("我是一个方法")
     3     }
     4     //return需要同返回值类型一起使用,不可独立存在
     5     def test2(x: Int, y: Int): Int = {
     6       return x + y
     7     }
     8     //返回值类型可以省略 ,Scala会根据方法体的最后一行内容进行类型推导
     9     def test3(x: Int, y: Int) = {
    10       x + y
    11     }
    12     //方法中没有参数的话,在调用方法的时候,可以省略()
    13     test1
    14     var a = test2(1, 2)
    15     println(a)
    16     print(test3(1, 5))
    17     //    我是一个方法
    18     //    3
    19     //    6

        方法的注意事项:

    •       方法的返回值类型可以不写,Scala会根据方法体的最后一行做类型推导
    •       return和返回值类型,同生共死
    •       方法中有递归操作时,返回值的类型必须指定,不可以省略,负责报错
    1   def foop(x:Int):Int={
    2     if (x<=1){
    3       return 1
    4     }
    5     return x*foop(x-1)
    6   }
    7     print(foop(3))
    8 //    6

        方法的参数种类

        1.默认参数

    1     def test1(x: Int = 0):Int = {
    2       return x
    3     }
    4     //这个括号不可省略,即使参数有默认值,但是方法依然有参数
    5     println(test1())
    6     println(test1(3))
    7 ###结果
    8 0
    9 3

        2.带名参数

    1     def test2(x:Int=1,y:Int=2):Int={
    2       return x+y
    3     }
    4     println(test2(x=3))
    5     println(test2(x=3,y=3))
    6 ###结果
    7 5
    8 6

        3.变长参数:当一个方法的参数不可定,可以把其参数定义为变长参数

     1     def test3(x: Int, num: Int*): Int = {
     2       //查看num的类型
     3       println(num.getClass)
     4      //使用数组的方法sum求和
     5       return num.sum + x
     6     }
     7 
     8     println(test3(1, 2, 3, 4))
     9 
    10 ###即使有默认参数,Scala依然会给其分配一个值,以防止变长参数收集参数的错误
    11     def test4(y: Int = 1, num: Int*) = {
    12       num
    13     }
    14 
    15     println(test4(2, 3, 4))
    16   }
    17 ###结果
    18 class scala.collection.mutable.WrappedArray$ofInt
    19 10
    20 WrappedArray(3, 4)         

        方法的调用

        1.后缀调用

        2.中缀调用

        3.花括号调用

        4.无括号调用

     1     //后缀调用
     2     var a = Math.abs(-1)
     3     println(a)
     4     //中缀调用 多个参数的话可以用()括起来
     5     var b=Math abs -1
     6     println(b)
     7 ###结果
     8 1
     9 1
    10     //to方法也是
    11     println(1 to 10)
    12     println(1.to(10))
    13 ###结果
    14 Range(1, 2, 3, 4, 5, 6, 7, 8, 9, 10)
    15 Range(1, 2, 3, 4, 5, 6, 7, 8, 9, 10)
    16     //花括号调用 语句块中的返回值即为参数,必须是一个
    17     var c=Math.abs{
    18       println("我是第三种方式")
    19       -1
    20     }
    21     println(c)
    22 ###结果
    23 我是第三种方式
    24 1
    25     //无括号调用,方法中没有参数,前面的数组求和就是,这里不举例

      2.函数

      Scala支持函数式编程,spark等大数据框架有很多的函数式编程

      定义:

        val 函数名 = (参数名:参数类型,...) =>{

          函数体

        }

     1     val fun1 = (x: Int, y: Int) => {
     2       x + y
     3     }
     4     println(fun1(1, 2))
     5     val fun2 = () => println("无参形式")
     6     fun2()
     7   }
     8 ###结果
     9 3
    10 无参形式

      函数的特点

    •   函数本身是一个独立的对象
    •   类似于方法有返回值,有参数
    •   定义函数时,不用def关键字
    •   无需指定返回值类型,也就不可以用return

      3.方法与函数的区别

    1.   方法是面向对象的概念,隶属于对象或类,不独立存在
    2.   函数本身就是一个对象,继承自Function 的父类,有其apply,tuple等方法

      4.方法转换为函数

    1     def test1(x: Int): String = {
    2       return s"我是一个方法${x}"
    3     }
    4     //方法转函数 格式  在方法的后面+一个空格+_
    5     var a = test1 _
    6     var b = a(2)
    7     println(b)
    8 ###结果
    9 我是一个方法2

      注意:方法可以转换成一个函数,但是函数不可以转换成一个方法 ,因为函数本身就是一个对象 

     二、数组

      1.定义:是一个可以存储相同数据类型的容器

      2.分类:①定长数组:开辟的内存空间不可变;存储的内容可变

          ②变长数组:数组的长度可变,可以对数组进行添加和删除空间操作

      3.定长数组

     1     //方式一 比较常用
     2     var a=Array(1,2,3)
     3     //用数组名(index)方式方位数组的元素,也可以赋值
     4     a(0)=2
     5     println(a.toBuffer)
     6 ###结果
     7     //    ArrayBuffer(2, 2, 3)
     8     //方式二 带new关键字
     9     var b=new Array[Int](4)
    10     b(0)=2
    11     //查看数组元素,与数组长度
    12     println(b.toBuffer)
    13     println(b.length)
    14     //不带new关键字
    15     var c= Array[Int](4)
    16     c(0)=2
    17     println(c.toBuffer)
    18     println(c.length)
    19 ###结果
    20 //    ArrayBuffer(2, 0, 0, 0)
    21 //    4
    22 //    ArrayBuffer(2)
    23 //    1

      4.变长数组

     1import scala.collection.mutable.ArrayBuffer

    //方式一:这种方法只能创建一个初始长度为0的可变长数组 后续通过 += 操作可以进行追加

    2 var a=ArrayBuffer[Int]()
     3     a+=1
     4     a+=1
     5     a+=1
     6     println(a.length)
     7     println(a.toBuffer)、
     8 ###结果
     9 3
    10 ArrayBuffer(1, 1, 1)
    11 
    12   //方式二:简单,而且常用,依旧使用 += 进行追加
    13   var b=ArrayBuffer(1,2,3)
    14     b+=4
    15     println(b.length)
    16     println(b.toBuffer)
    17 ###结果
    18 4
    19 ArrayBuffer(1, 2, 3, 4)

      数组的操作

    •   使用 += 添加元素 在数组末尾添加
    •   使用 -= 删除元素 等号后面跟的是要删除的元素
    •   使用 ++= 追加一个数组(定长或变长均可)到一个变长数组,只有变长数组才有这个操作
    1  var b=ArrayBuffer(1,2,3)
    2     b+=4
    3     var a =Array(1,2,3)
    4     var c = b++=a
    5     println(c.toBuffer)
    6 ###结果
    7 ArrayBuffer(1, 2, 3, 4, 1, 2, 3)

      数组的遍历

     1     var b=ArrayBuffer(1,2,3)
     2     b+=4
     3     //方式一:for遍历
     4     for (i<-b)println(i)
     5     println("-------------")
     6     //方式二:使用下标遍历
     7     for(i<- 0 until b.length)println(b(i))
     8 ###结果
     9 1
    10 2
    11 3
    12 4
    13 -------------
    14 1
    15 2
    16 3
    17 4

      数组的一些相关操作

     1 数组的拷贝
     2      var a = Array(1, 2, 3, 4)
     3     //b是一个空的数组
     4     var b = new Array[Int](3)
     5     //参数一 目标数组,参数二 目标数组开始索引,参数三 原数组 的copy个数
     6     a.copyToArray(b, 0, 3)
     7     for (i <- b) println(i)
     8 ###结果
     9     //    1
    10     //    2
    11     //    3
     1     //将数组变成字符串
     2     var a = Array(1, 2, 3, 4)
     3     //使用"-"符号进行拼接
     4     var b = a.mkString("-")
     5     println(b)
     6 //    1-2-3-4
     7     //数组怕排序,默认升序,可以在进行反转得到降序结果
     8     var c =Array(5,4,8,6)
     9     var d=c.sorted
    10     println(d.toBuffer)
    11 //    ArrayBuffer(4, 5, 6, 8)
    12     println(d.reverse.toBuffer)
    13 //    ArrayBuffer(8, 6, 5, 4)

      其他常见的方法

    • 数组的长度
    • a.length
    • 数组内容求和
    • a.sum
    • 数组的最大值
    • a.max
    • 数组的最小值
    • a.min
    • 第一个数据
    • a.head
    • 除掉第一个元素后面的数据
    • a.tial

    三、元组

      1.三要素

    •     Scala 中的元组数据不要求同类型
    •     元组的数据内容,不可变
    •     Scala元组的个数是22个
    •                用于网路进程见的数据传输

      2.定义格式

     1     //方式一:简单常用 格式:var/val 元组 = (元素1,元素2,元素3)//最多能够容纳22元素
     2     var a = (1, "sss", 3)
     3     println(a.getClass)
     4     println(a)
     5     //class scala.Tuple3
     6     //(1,sss,3)
     7     //方式二:var/val 元组 = 元素1 -> 元素2 这种定义方式 元组中 只能有2个元素
     8     var b = 1 -> 2->3
     9     println(b)
    10     //((1,2),3)

      3.下标访问

    1     //下标访问元组 元组的索引用 1 开始
    2     var a = (1, "sss", 3)
    3     println(a._1)
    4     println(a._2)
    5     //1
    6     //sss

      

      

      

  • 相关阅读:
    怎么样实现打印网页中指定的表格,而不是全页
    加深C# 中字符串前加@符号理解以及使用~~
    CommandArgument 绑定多个参数
    gridview等控件CommandField英文的解决.
    正式发布基于VS2008的AJAX模板包
    给datalist加自动编号
    .net生成文字图片
    重新注册.net
    Android JNI入门第二篇——Java参数类型与本地参数类型对照
    Android推送方式比较
  • 原文地址:https://www.cnblogs.com/cmxbky1314/p/12263393.html
Copyright © 2011-2022 走看看