zoukankan      html  css  js  c++  java
  • Scala学习笔记2 (带着问题学习, 逐渐扩展。理解吃透scala.)

    问题: 把 文本字符串"[1, 2, 3, 4, 5]" 转换成一个数组。 

    答案:

    val x = "[1, 2, 3, 4, 5]"

    val y =x slice(1, x.length-1) replace(",","") split(" ")

    var y1= x slice(1, x.length-1) replace(",","") split(" ") map(_.toInt)
    y1: Array[Int] = Array(1, 2, 3, 4, 5)

    或者写成

    var y1= x.slice(1, x.length-1).replace(",","").split(" ").map(_.toInt)

    或者

    val y:Array[Int]= x slice(1, x.length-1) replace(",","") split(" ") map(_.toInt)

    scala鼓励程序员用val声明变量,val实际上是一个常量,无法修改内容。 var声明变量, 可以修改。 

    不需要给出值或者变量的类型, 因为类型可以从初始化, 或者赋值的表达式里推断出来。 

    如果指定值或者变量的类型,会执行类型检查, 要求赋值表达式两边的类型要匹配。 例如下面的例子, 赋值会失败,因为类型不匹配。

    val y:Array[Int]= x slice(1, x.length-1) replace(",","") split(" ")
    <console>:37: error: type mismatch;
    found : Array[String]
    required: Array[Int]
    val y:Array[Int]= x slice(1, x.length-1) replace(",","") split(" ")

    类型转换问题:

    以上对数组进行类型转换用的是map(_.toInt)

    对单个字符串转换的例子是 “1”.toInt, 这里toInt不用加括号。 

    有意思的是数字转成字符串的时候,1.toString,  1.toString()都是可以的.

     在scala中, 类型转化用的都是方法, 而不是强制类型转换.  

    Int 转成Long 是使用 testInt.toLong而不可以像C++和jaiva里用到的(Long)testInt

    关于函数调用问题:

    上面例子里 x.slice(1, x.length-1), 也可以用 x slice(1, x.length-1)

    scala里调用一个函数可以用

    a 方法 b

    也可以用

    a.方法(b)   用.来引用方法的时候, 必须用括号

    还可以

    a 方法(b)用空格来引用方法的时候, 且如果只有一个参数,不一定用括号。 上面的写法还可以是

    val y =x slice(1, x.length-1) replace(",","") split " "

    如果是么有参数的函数, 调用的时候不需要加() , 例如 1.toString()

    和java不一样, scala支持重写运算符。 scala有一个伴生对象apply方法, 是不需要显示的写出函数名的。 它是Scala中构建对象的常用方法。 例如

    Array(1,4,5,16)返回一个数组用的就是Array伴生对象的apply方法, 看上去类似于构造函数, 但其实不完全是。 

    再比如"Hello"(4)返回‘o’, 实际上是在调用StringOps类中的def apply(n:Int): Char 方法。 

     

  • 相关阅读:
    本地缓存方式
    iOS Touch ID 身份认证
    iOS之WKWebView
    [Objective-C]关联(objc_setAssociatedObject、objc_getAssociatedObject、objc_removeAssociatedObjects)
    iOS利用UIDocumentInteractionController和Quick Look打开或预览文档
    轮播图的无限轮播
    贝赛尔曲线UIBezierPath(后续)
    贝赛尔曲线UIBezierPath
    NSRunLoop的进一步理解
    CADisplayLink 及定时器的使用
  • 原文地址:https://www.cnblogs.com/realzjx/p/5850078.html
Copyright © 2011-2022 走看看