强怀梅 发表于 3 天前

Scala语法篇

Scala基础篇

数据类型

下表中列出的数据类型都是对象,可以直接对它们调用方法。
数据类型描述Byte8位有符号补码整数。数值区间为 -128 到 127Short16位有符号补码整数。数值区间为 -32768 到 32767Int32位有符号补码整数。数值区间为 -2147483648 到 2147483647Long64位有符号补码整数。数值区间为 -9223372036854775808 到 9223372036854775807Float32 位, IEEE 754 标准的单精度浮点数Double64 位 IEEE 754 标准的双精度浮点数Char16位无符号Unicode字符, 区间值为 U+0000 到 U+FFFFString字符序列Booleantrue或falseUnit表示无值,和其他语言中void等同。用作不返回任何结果的方法的结果类型。Unit只有一个实例值,写成()。Nullnull 或空引用NothingNothing类型在Scala的类层级的最底端;它是任何其他类型的子类型。AnyAny是所有其他类的超类AnyRefAnyRef类是Scala里所有引用类(reference class)的基类表示Long类型,在数字后面添加L或者l作为后缀;浮点数后面有f或者F后缀时,表示Float类型,否则就是Double
变量

用关键词“var”声明变量,关键词"val"声明常量。
var myName : String = "gyt"
val myAge : Int = 21 scala中不一定要指明数据类型,其数据类型通过变量或常量的初始值推断出来的,因此,在没有指明数据类型的情况下,必须要给出初始值。
访问修饰符

用private关键词修饰,只能被当前类以及当前类的内部类访问到,外层类访问不到。
class Outer{
    class Inner{
      private def f(){
            println("f")
      }
      class InnerMost{
            f() // 正确
      }
    }
    (new Inner).f() //错误
}用protected关键词修饰,只能被当前类的子类访问。
package p {
    class Super {
      protected def f() {println("f")}
    }
    class Sub extends Super {
      f()
    }
    class Other {
      (new Super).f() //错误
    }
}没有指定任何修饰符,默认为public,在任何地方都可以被访问。
条件和循环

以下是IF...ELSE语句实例。
object Test {
   def main(args: Array) {
      var x = 30;

      if( x == 10 ){
         println("X 的值为 10");
      }else if( x == 20 ){
         println("X 的值为 20");
      }else if( x == 30 ){
         println("X 的值为 30");
      }else{
         println("无法判断 X 的值");
      }
   }
}
以下是一个使用了 i to j 语法(包含 j)的实例,箭头"scala.Int"      case _ => "many"   }}实例中第一个 case 对应整型数值 1,第二个 case 对应字符串值 two,第三个 case 对应类型模式,用于判断传入的值是否为整型,相比使用isInstanceOf来判断类型,使用模式匹配更好。第四个 case 表示默认的全匹配备选项,即没有找到其他匹配时的匹配项,类似 switch 中的 default。
object Test {
   def main(args: Array) {
      var a = 0;
      // for 循环
      for( a <- 1 to 10){
         println( "Value of a: " + a );
      }
   }
}使用了case关键字的类定义就是样例类(case classes),样例类是种特殊的类,经过优化以用于模式匹配。
迭代器

Scala Iterator(迭代器)不是一个集合,它是一种用于访问集合的方法。迭代器 it 的两个基本操作是 next 和 hasNext。调用 it.next() 会返回迭代器的下一个元素,并且更新迭代器的状态。调用 it.hasNext() 用于检测集合中是否还有元素。让迭代器 it 逐个返回所有元素最简单的方法是使用 while 循环:
object Test {
   def main(args: Array) {
      var a = 0;
      var b = 0;
      // for 循环
      for( a <- 1 to 3; b <- 1 to 3){
         println( "Value of a: " + a );
         println( "Value of b: " + b );
      }
   }
}下表列出了Scala Iterator常用的方法:
序号方法及描述1def hasNext: Boolean如果还有可返回的元素,返回true。2def next(): A返回迭代器的下一个元素,并且更新迭代器的状态3def ++(that: => Iterator): Iterator合并两个迭代器4def ++(that :=> GenTraversableOnce): Iterator合并两个迭代器5def addString(b: StringBuilder): StringBuilder添加一个字符串到 StringBuilder b6def addString(b: StringBuilder, sep: String): StringBuilder添加一个字符串到 StringBuilder b,并指定分隔符7def buffered: BufferedIterator迭代器都转换成 BufferedIterator8def contains(elem: Any): Boolean检测迭代器中是否包含指定元素9def copyToArray(xs: Array, start: Int, len: Int): Unit将迭代器中选定的值传给数组10def count(p: (A) => Boolean): Int返回迭代器元素中满足条件p的元素总数。11def drop(n: Int): Iterator返回丢弃前n个元素新集合12def dropWhile(p: (A) => Boolean): Iterator从左向右丢弃元素,直到条件p不成立13def duplicate: (Iterator, Iterator)生成两个能分别返回迭代器所有元素的迭代器。14def exists(p: (A) => Boolean): Boolean返回一个布尔值,指明迭代器元素中是否存在满足p的元素。15def filter(p: (A) => Boolean): Iterator返回一个新迭代器 ,指向迭代器元素中所有满足条件p的元素。16def filterNot(p: (A) => Boolean): Iterator返回一个迭代器,指向迭代器元素中不满足条件p的元素。17def find(p: (A) => Boolean): Option返回第一个满足p的元素或None。注意:如果找到满足条件的元素,迭代器会被置于该元素之后;如果没有找到,会被置于终点。18def flatMap(f: (A) => GenTraversableOnce): Iterator针对迭代器的序列中的每个元素应用函数f,并返回指向结果序列的迭代器。19def forall(p: (A) => Boolean): Boolean返回一个布尔值,指明 it 所指元素是否都满足p。20def foreach(f: (A) => Unit): Unit在迭代器返回的每个元素上执行指定的程序 f21def hasDefiniteSize: Boolean如果迭代器的元素个数有限则返回 true(默认等同于 isEmpty)22def indexOf(elem: B): Int返回迭代器的元素中index等于x的第一个元素。注意:迭代器会越过这个元素。23def indexWhere(p: (A) => Boolean): Int返回迭代器的元素中下标满足条件p的元素。注意:迭代器会越过这个元素。24def isEmpty: Boolean检查it是否为空, 为空返回 true,否则返回false(与hasNext相反)。25def isTraversableAgain: BooleanTests whether this Iterator can be repeatedly traversed.26def length: Int返回迭代器元素的数量。27def map(f: (A) => B): Iterator将 it 中的每个元素传入函数 f 后的结果生成新的迭代器。28def max: A返回迭代器迭代器元素中最大的元素。29def min: A返回迭代器迭代器元素中最小的元素。30def mkString: String将迭代器所有元素转换成字符串。31def mkString(sep: String): String将迭代器所有元素转换成字符串,并指定分隔符。32def nonEmpty: Boolean检查容器中是否包含元素(相当于 hasNext)。33def padTo(len: Int, elem: A): Iterator首先返回迭代器所有元素,追加拷贝 elem 直到长度达到 len。34def patch(from: Int, patchElems: Iterator, replaced: Int): Iterator返回一个新迭代器,其中自第 from 个元素开始的 replaced 个元素被迭代器所指元素替换。35def product: A返回迭代器所指数值型元素的积。36def sameElements(that: Iterator): Boolean判断迭代器和指定的迭代器参数是否依次返回相同元素37def seq: Iterator返回集合的系列视图38def size: Int返回迭代器的元素数量39def slice(from: Int, until: Int): Iterator返回一个新的迭代器,指向迭代器所指向的序列中从开始于第 from 个元素、结束于第 until 个元素的片段。40def sum: A返回迭代器所指数值型元素的和41def take(n: Int): Iterator返回前 n 个元素的新迭代器。42def toArray: Array将迭代器指向的所有元素归入数组并返回。43def toBuffer: Buffer将迭代器指向的所有元素拷贝至缓冲区 Buffer。44def toIterable: IterableReturns an Iterable containing all elements of this traversable or iterator. This will not terminate for infinite iterators.45def toIterator: Iterator把迭代器的所有元素归入一个Iterator容器并返回。46def toList: List把迭代器的所有元素归入列表并返回47def toMap: Map将迭代器的所有键值对归入一个Map并返回。48def toSeq: Seq将代器的所有元素归入一个Seq容器并返回。49def toString(): String将迭代器转换为字符串50def zip(that: Iterator): Iterator[(A, B)返回一个新迭代器,指向分别由迭代器和指定的迭代器 that 元素一一对应而成的二元组序列
来源:程序园用户自行投稿发布,如果侵权,请联系站长删除
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!
页: [1]
查看完整版本: Scala语法篇