• Scala 函数式程序设计原理(3)--Data and Abstraction


    3.1 Class Hierarchies

    Object-oriented languages (including Scala) implement dynamic method dispatch.

    This means that the code invoked by a method call depends on the runtime type of the object that contains the method.

    3.2 How Classes Are Organized

    Classesand Objects are organized in packages.

    To place a class or object inside a package, use a package clause at the top of your source file.

    package progfun.example
    
    object Hello { ... }

    This would place Hello in the package progfun.examples. You can then refer to Hello by its fully qualified name progfun.examples.Hello. For instance, to run the Hello program.

    Nothing is at the bottom of Scala's type hierarchy. It is a subtype of every other type.

    There is no value of type Nothing.

    Why is that useful?

    • To signal abnormal termination
    • As an element type of empty collections

    Every reference class type alss has null as a value.

    The type of null is Null.

    Null is a subtype of every class that inherits from Objects; it is incompatible with subtypes of AnyVal.

    3.3 Polymorphism

    Type parameterization means that classes as well as methods can now have types as parameters.

    Type parameters do not affect evaluation in Scala.

    We can assume that all type parameters and type arguments are removed before evaluating the program.

    This is also called type erasure.

    Language that use type erasure include Java, Scala, Haskell, Ml, OCaml.

    Some other languages keep the type parameters around at run time, these include C++, C#, F#.

    Polymorghism means that a function type comes "in many forms".

    In programming it means that:

    • the function can be applied to arguments of many types, or
    • tye type can have instances of many types.

    We have seen two principal forms of polymorphism:

    • subtyping: instances of a subclass can be passed to a base class
    • generics: instances of a function or class are created by type parameterization.
    • trait List[T] {
        def isEmpty: Boolean
        def head: T
        def tail: List[T]
        def nth(n: Int): T
      }
      class Cons[T](val head:T, val tail: List[T]) extends List[T] {
        def isEmpty = false
        def nth(n: Int) = {
          if(n < 0) throw new IndexOutOfBoundsException("index less than 0")
          else if(n == 0) head
          else tail nth(n-1)
        }
      }
      class Nil[T] extends List[T] {
        def isEmpty = true
        def head: Nothing = throw new NoSuchElementException("Nil.head")
        def tail: Nothing = throw new NoSuchElementException("Nil.tail")
        def nth(n: Int) = throw new IndexOutOfBoundsException("Nil")
      }
  • 相关阅读:
    fstest
    iozone
    fio
    vdbench
    饼状图点击凸出,适合颜色选择
    个人常用的win7快捷键
    form表单提交数据
    jquery允许跨越获取cookie
    设置滚动条样式与监听滚动到底部
    设置滚动条样式与监听滚动到底部
  • 原文地址:https://www.cnblogs.com/PaulingZhou/p/6866513.html
Copyright © 2020-2023  润新知