• Scala基础知识(二)


    1.条件表达式

    object ConditionDemo {
      def main(args: Array[String]) {
        val x = 1
        //判断x的值,将结果赋给y
        val y = if (x > 0) 1 else -1
        //打印y的值
        println(y)
    
        //支持混合类型表达式
        val z = if (x > 1) 1 else "error"
        //打印z的值
        println(z)
    
        //如果缺失else,相当于if (x > 2) 1 else ()
        val m = if (x > 2) 1
        println(m)
    
        //在scala中每个表达式都有值,scala中有个Unit类,写做(),相当于Java中的void
        val n = if (x > 2) 1 else ()
        println(n)
    
        //if和else if
        val k = if (x < 0) 0
        else if (x >= 1) 1 else -1
        println(k)
      }
    }

    2.块表达式

    val result = {
          if (x < 0){
            -1
          } else if(x >= 1) {
            1
          } else {
            "error"
          }
        }

    块表达式中一般最后一个参数就是表达式的返回值。

    3.循环语句

    for循环 1 to 10 ,to是一个方法,是将1到10数据产生

    for的格式1: for(i <- res1)object ForDemo {

      def main(args: Array[String]) {
        //for(i <- 表达式),表达式1 到 10返回一个Range
        //每次循环将区间中的一个值赋给i
        for (i <- 1 to 10)
          println(i)
    
        //for(i <- 数组)
        val arr = Array("a", "b", "c")
        for (i <- arr)
          println(i)
    
        //高级for循环
        //每个生成器都可以带一个条件,if前面没有分号
        for(i <- 1 to 3; j <- 1 to 3 if i != j)
          print((10 * i + j) + " ")
        println()
    
        //for推导式:如果for循环的循环体以yield开始,则该循环会构建出一个集合
        //每次迭代生成集合中的一个值,将i的值进行操作,将数据装入vector中。如果对数组进行操作,最后结果返回一个数组。
        val v = for (i <- 1 to 10) yield i * 10
        println(v)
    } }

    练习:将一个1到9的数据中的偶数取出来。

    //使用val更加的节省资源
    val a1=Array(1,2,3,4,5,6,7,8,9)
    val a1=for(i<- a1;if(i%2==0)) yield i

    练习:filter过滤

    a1.filter(_%2==0)

    _表示每次输出的值

    for循环通过角标开始

    for(i <- 1 to a1.length)
    println(a1(i-1))
    for(i <- 1 until a1.length)
    println(a1(i))

    to是[]的操作,until是(]的操作

    1 to 10  等同于 1.to(10)

    5.在scala中是不存在操作符运算的,运算的底层都是使用方法来完成的。

    scala>1-3
    res1:Int = -2
    
    scala>1.-(3)
    res2:Double = -2.0

    对于为什么返回的是一个double,这是因为它将第一个1当做是double运算的,所以后来大印的就是double。

    测试方法:将3定义成一个val a的值,1.-(a)结果仍为double,将1定义为一个val b的值,a.-(b)结果是int。

    在源码中,方法的返回的类型和输入的参数是和传入参数有关的。

    6.方法和函数

    方法定义 def 方法名(参数列表):返回值类型 = 操作

    方法定义:
    def m1(a:Int,b:Int):Int = x*y
    方法调用
    m1(3,5)
    
    不写返回值的类型
    def m1(a:Int,b:Int) = x*y
    
    注意:但是递归是必须要有返回值类型的。

    7.函数定义

    定义一个函数,无名函数
    (x:Int,y:Int)=>{x+y}  
    
    
    有名函数
    val f1=(x:Int,y:Int)=>{x+y}
    
    
    调用
    f1(参数)
     

    8.函数有一个特性就是可以作为参数传入到方法里面。

    定义一个函数
    val f3=(x:int)=>x*10
    准备一个数组,将数组的值进行函数f3的操作
    val a1=Array(1,2,3,4,5,6,7,8,9)
    a1.map(f3)

    这也就是说函数式编程可以将数据的进行任意操作,这也是他的灵活性。

    9.方法是通过方法名进行调用,函数是可以作为参数进行传递的。

    10.a1.map(_*100) 将a1中数据乘以10.这个是不定义函数,也可以定义匿名函数

    匿名函数
    
    
    a1.map((x:Int)=>x*100)

    但是在a1中的参数都是知道的,这个时候就不需要指定数据的类型
    a1.map(x=>x*10)

    当然了最简单的方式是
    a1.map(_*100)

    11.下划线的作用

      将方法转化为函数,如果一个函数的逻辑和方法的逻辑相同,那么就可以使用下面的方法将方法转换为函数。

    def testZhanshu(x:Int,y:Int):Int = {
       X+y;
    }
    将上面的方法转换为函数
    Val fun2 = testZhanshu_

     总结:

           函数和方法的最大区别在于,函数可以作为参数进行传递。

      定义函数的方式

    Val fun=(x:Int,y:Int)=>操作
    Val fun1 = (x:Int,y:Int)=>返回值[可以为任意的,可以是一个元祖
    
    返回值类型是可以设置的,也可以不需要设置的,因为元函数的返回值是可以自己推断出来的。] ={操作}
    Val fun2:(Int,Double)=>(Double,Int)={(x,y[因为只是将前面数据的定义了,但是并没有定义变量,所以这里的需要将变量定义出来。])=>具体的业务逻辑}
    递归必须有返回值类型的
    加入说没有返回值的时候,这个时候返回值是Unit,调用之后,返回值是一个()
  • 相关阅读:
    EasyNVS摄像机公网全终端无插件网页摄像机直播管理服务运行出现“请求服务不存在或已停止”
    EasyNVR摄像机网页直播之问题解决:Failed_SYSTEM_CurrentCont......_Application_EasyNVR_Service registry key alr
    EasyNVR智能云终端硬件盒子x86版自我维护之摄像机网页直播系统基础运维
    EasyNVR网页无插件播放摄像机RTSP流是如何调取接口在Web页实现多窗口同时直播的
    EasyNVR网页Chrome无插件播放安防摄像机视频流是怎么做到web浏览器延时一秒内
    EasyNVR摄像机网页H5全平台无插件直播流媒体播放服务二次开发之接口鉴权示例讲解
    EasyNVR摄像机网页Chrome无插件视频播放功能二次开发之通道配置文件上传下载示例代码
    EasyNVR网页H5无插件播放摄像机视频功能二次开发之直播通道接口保活示例代码
    EasyNVR网页Chrome无插件播放摄像机视频功能二次开发之云台控制接口示例代码
    如何通过设备探索获取EasyNVR、EasyDSS所需要的摄像机rtsp地址
  • 原文地址:https://www.cnblogs.com/kw28188151/p/8657126.html
Copyright © 2020-2023  润新知