zoukankan      html  css  js  c++  java
  • Scala学习笔记(一)数据类型

    .类型参数化数组

    val arrayString = Array[String](2);

    arrayString (0)=”Hello”;

    arrayString (1)=”World”;

    for (i <- 0 to 1){

    print(arrayString (i))

    }

    需要留意上面代码的几个地方如下:

    1、无论是在创建数组时的维度指定,还是对数组元素的访问都是使用括号,这里本质上是调用了Array类对应的方法返回的结果完成的操作;

    2、scala基本原则:方法若只有一个参数,调用的时候可以省略点和括号, 如:(0).to (1),但必须明确方法调用者;

    3、用括号传递给变量一个或多个参数时,scala会将它转换成对apply方法的调用,如:arrayString(i)转换为arrayString.apply(0);

         更简单理解:申请创建对象时将括号转换为apply方法的调用;

    4、对带有括号并包括一个或多个参数的变量赋值时,将使用对象的update方法对括号里的参数和等号右边的的对象执行调用,如:arrayString (0)=”Hello” 转换为 arrayString.update(0,”Hello”);

         更简单理解:数组创建完成后对更新数组元素的值时采用update;

     

    .list

    1、list与Array的区别:Array数组实例化后数组的长度不能在变,但数组的元素可变。list一旦创建无论是长度还是元素都不可变;

    2、list中有两个方法需要注意分别为 :: 与  ::: , :: (右操作数方法)将新元素组合到现有列表的前端返回新列表,  ::: 方法实现多个列表元素的叠加返回新列表;

    3、空表的简写为 Nil ;

     

    .元组(Tuple)

    元组的特点为能包含多种数据类型,例如:

    val t = (1234,”Hello World!”)

    访问元组的两个元素分别为:t._1与t._2

     

    .Set集合

    创建set对象与list、array类似,通过伴生对象的apply方法实现,Set分为可变的与不可变的分别存在下图不同的包中:

    image

    scala.collection.immutable.HashSet包中的Set不可变,scala.collection.mutale包中的Set为可变;

     

    .Map集合

    在对应的map集合中也分为可变与不可变两种,其中scala.collection.immutable为不可变,scala.collection.mutable为可变,继承关系如下图:

    image 

     

    .文件操作

    引用的包名:scala.io.Source

    调用代码:Source.fromfile(文件路径).getLines.toList

    Source.fromfile(文件路劲)打开指定的文件并返回Source对象,调用getLines后返回 Iterator[String]枚举器,最后掉用 toList将迭代器转换为List;

    注:Iterator[String]枚举器迭代完成后将会失效,所以需要转换为List;

     

    .Singleton

    scala中不能定义静态成员,取而代之的为单例对象,单例对象的定义与类的定义唯一的区别就为,类用class修饰而单例对象用object修饰,当单例对象与某个类的名称相同时,该单例对象称为此类的伴生对象,类和它的伴生对象必须定义在同一个源文件中,类和它的伴生对象可以互相访问各自的私有成员;

     

    .Scala程序

    独立运行scala程序,必须创建 有main方法(返回值为Unit,参数为Array[String])的单例对象;

    编译方式:scalac   文件名.scala  ;// 该方法编译会有点慢

    快速编译方式:fsc 文件名.scala

    运行程序:scala  单例对象名(包含main方法)  参数1  参数2 ……; //参数之间用空格隔开

    另一种设置scala程序入口的方式 Application特质:

    object MyTest extends Application{
        println("Hello World!");
    }

    与带main方法的单例对象相比缺陷在于无法访问命令行参数;

     

    .字符字面量
    单引号之间的任何Unicode字符;

    八进制必须在’’与’377’之间,字符八进制的表示前缀必须为反斜杠;

    scala> val a = ‘101’

    a: Char = A

    十六进制以前缀’u’加四位十六进制数字表示;

    scala val a = ‘u0041’

    a: Char = A

    常用的转意字符如下图:

    image

     

    .字符串字面量

    在字符串字面量中需要注意的是scala为原始字符串引入的一种特殊的语法,它以同一行的三个以引号做为开始和结束,内部的原始字符串可以包含无论何种任意字符(三个引号除外),若前导存在空格,去掉空格可结合管道  | 与 stripMargin函数(管道符号放每行前,然后对整个字符串调用stripMargin)。

    image 

    该篇最后说下scala中的val与var,var表示变量的定义,而val表示常量的定义(类似Java中的final),而且是没有副作用的,在scala编写程序时,尽量使用val因为它能更好的支持等效推论以及重构;

     

  • 相关阅读:
    C#拾遗系列(2):属性
    都江堰我永远支持你
    【号外】2011 Autodesk开发者日又来啦~~
    DB_RUNRECOVERY: Fatal error, run database recovery StackTrace问题的解决办法
    [书友交流] <Autodesk 地理信息系统解决方案FDO、MapGuide、AutoCAD Map 3D二次开发指南>读书交流贴
    Autodesk Infrastructure Map Server 2012 SP1 Released!
    Map3D中获取地图中心及Zoom到新的中心点
    Introduction to MapGuide OpenSource – from FOSS4G in Denver
    获取选中地物的Geometry对象,及把Geometry对象显示在地图上
    [在线技术活动]Civil 3D 部件编辑器详解
  • 原文地址:https://www.cnblogs.com/jianyuan/p/4196868.html
Copyright © 2011-2022 走看看