代码之家  ›  专栏  ›  技术社区  ›  Madaray

在scala中使用循环声明val

  •  0
  • Madaray  · 技术社区  · 7 年前

    我正在学习scala,我想知道是否可以用以下方式声明val:

    val aLotOfZero : String = for(i<-0 to 63) {"0"}
    

    而不是

      var tmp : String = ""
      for(i<-0 to 63)
        {
          tmp += "0"
        }
      val aLotOfZero : String = tmp 
    

    如果有可能用其他东西替换“0”。

    谢谢你

    1 回复  |  直到 7 年前
        1
  •  2
  •   nicodp    7 年前

    如果你想建立一个 String 具有的值 n 零,您可以使用 for 让角色屈服 0 然后返回 Vector 到字符串,使用 mkString 具体如下:

    scala> val aLotOfZeroes: String = (for (i <- 0 to 63) yield "0").mkString
    aLotOfZeroes: String = 0000000000000000000000000000000000000000000000000000000000000000
    

    然后,您可以通过添加类似的参数来概括它:

    scala> def aLotOfZeroes(n: Int): String = (for (i <- 0 to n) yield "0").mkString 
    aLotOfZeroes: (n: Int)String
    
    scala> aLotOfZeroes(10)
    res2: String = 00000000000
    
    scala> val zeroes: String = aLotOfZeroes(10)
    zeroes: String = 00000000000
    
    scala> zeroes
    res3: String = 00000000000
    

    此外,从@dividebyzero的注释中,您可以使用 * :

    scala> "0" * 64
    res13: String = 0000000000000000000000000000000000000000000000000000000000000000
    

    并定义:

    scala> def aLotOfZeroes: Int => String = "0" * _
    aLotOfZeroes: Int => String
    
    scala> aLotOfZeroes(10)
    res16: String = 0000000000