当前位置:网站首页>scala-for推导:能够在for表达式中的最初部分定义值,并在(外面)后面的表达式中使用该值

scala-for推导:能够在for表达式中的最初部分定义值,并在(外面)后面的表达式中使用该值

2022-06-22 15:24:00 ZH519080

在scala的for循环中,如何在不适用容器的情况下,在for循环(外面)后面调用其for中定义的属性。对象中包含None属性在for中如何剔除???

两种情况写在同一个函数里面:

  /**for推导:能够在for表达式中的最初部分定义值,病在后面的表达式中使用该值
    * 如upcaseBreed在println中使用*/
  def roundingFor: Unit ={

    val dogBreeds = List("Doberman","Dachshund","Scottish","Portuguese")
    for {
      breed <- dogBreeds
      /**尽管upcaseBreed的值不可变,upcaseBreed不需要在前面设定,但并不需要使用val关键字进行限定*/
      upcaseBreed = breed.toUpperCase
    } println(upcaseBreed)  //相当于在for循环后面使用for内的属性

    println(
      """    *
        |   ***
        |  *****
        |*********
        |  *****
        |   ***
        |    *
      """.stripMargin)


    val catBreeds = List(Some("Dane"),None,Some("Yorkshire"),None,Some("Scottish"))
    println("first pass:")
    for {
      /**每个被提取的元素均为Option对象。而后续的代码中将使用箭头符提取Option中的值,推导式会进行有效的检查并忽略None,不会有异常*/
      breedOption <- catBreeds
      breed <- breedOption
      upcaseBreed = breed.toUpperCase
    } println(upcaseBreed)

    println("second pass:")
	/**在第一个for循环内部定义的breed和upcaseBreed属性在下面的第二个for循环中使用*/
    for {
      /**此for推导式使用了模式匹配,只有当breedOption是Some类型时,表达式Some(breed) <- catBreeds才会执行并提取出breed*/
      Some(breed) <- catBreeds
      upcaseBreed = breed.toUpperCase
    } println(upcaseBreed)
  }

 

原网站

版权声明
本文为[ZH519080]所创,转载请带上原文链接,感谢
https://blog.csdn.net/ZH519080/article/details/83410789