package com.ming.test

import scala.collection.mutable.ArrayBuffer
import scala.io.Source
import java.awt.image.BufferedImage
import javax.imageio.ImageIO
import java.io.File /**
* 高级类型
*/
//单例类型,链式调用
class Document{
def setTitle(title:String)={this}
def setAuthor(author:String)={this}
} class Book extends Document{
def addBook(name:String):this.type={this}
} //类型投影
class NetWork{
class Member(val name:String){
val contacts=new ArrayBuffer[Member]
}
private val members=new ArrayBuffer[Member]
def join(name:String)={
val m=new Member(name)
members+=m
m
}
} //定义Person类,两个泛型参数,分别是S,T,因此
//它是可以用中置表达式进行变量定义的
case class Person[S,T](val name:S,val age:T)
//中置类型-中置类型是代表带有两个参数的类型
class ZhongziType{
//下面的代码是一种中置表达方法,相当于
//val p:Person[String,Int]
val p:String Person Int= Person("摇摆少年梦",18)
} //抽象类型--类或特质可以定义一个在子类中被具体化的抽象类型
trait Reader{
type Contents
def read(fileName : String):Contents
} trait Reade1r[T]{
def read(fileName : String):T
} //类型Contents是抽象的。具体的子类需要指定这个类型
class StringReader extends Reader{
type Contents=String
def read(fileName : String)=Source.fromFile(fileName,"UTF-8").mkString
} class ImageReader extends Reader{
type Contents=BufferedImage
def read(fileName :String)=ImageIO.read(new File(fileName))
} // object SeniorTypeTest { def main(args: Array[String]): Unit = {
var d=new Book
var s=d.setAuthor("a").setTitle("hello");
println(s)
var b=new Book
b.addBook("<<helloworld>>").setAuthor("mingge").setTitle("hello")
println(b)
}
}

感觉scala好多规则,好晕好绕。。。

scala一些高级类型的更多相关文章

  1. Scala进阶之路-Scala中的高级类型

    Scala进阶之路-Scala中的高级类型 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.类型(Type)与类(Class)的区别 在Java里,一直到jdk1.5之前,我们说 ...

  2. Scala类型系统——高级类类型(higher-kinded types)

    高级类类型就是使用其他类型构造成为一个新的类型,因此也称为 类型构造器(type constructors).它的语法和高阶函数(higher-order functions)相似,高阶函数就是将其它 ...

  3. Scala的Higher-Kinded类型

    Scala的Higher-Kinded类型 Higher-Kinded从字面意思上看是更高级的分类,也就是更高一级的抽象.我们先看个例子. 如果我们要在scala中实现一个对Seq[Int]的sum方 ...

  4. 第54讲:Scala中复合类型实战详解

    今天学习了scala的复合类型的内容,让我们通过实战来看看代码: trait Compound_Type1trait Compound_Type2class Compound_Type extends ...

  5. 第53讲:Scala中结构类型实战详解

    今天学习了scala的结构类型,让我们看看代码 class Structural {def open() = print("A class interface opened") } ...

  6. Scala 深入浅出实战经典 第54讲:Scala中复合类型实战详解

    王家林亲授<DT大数据梦工厂>大数据实战视频 Scala 深入浅出实战经典(1-64讲)完整视频.PPT.代码下载:百度云盘:http://pan.baidu.com/s/1c0noOt6 ...

  7. Scala 深入浅出实战经典 第53讲:Scala中结构类型实战详解

    王家林亲授<DT大数据梦工厂>大数据实战视频 Scala 深入浅出实战经典(1-64讲)完整视频.PPT.代码下载:百度云盘:http://pan.baidu.com/s/1c0noOt6 ...

  8. Scala的Option类型

    Scala的Option类型 为了让所有东西都是对象的目标更加一致,也为了遵循函数式编程的习惯,Scala鼓励你在变量和函数返回值可能不会引用任何值的时候使用Option类型.在没有值的时候,使用No ...

  9. C# vs TypeScript - 高级类型

    总目录 从C#到TypeScript - 类型 从C#到TypeScript - 高级类型 从C#到TypeScript - 变量 从C#到TypeScript - 接口 从C#到TypeScript ...

随机推荐

  1. Android HttpClient基本使用方法

    GET 方式 //先将参数放入List,再对参数进行URL编码 List<BasicNameValuePair> params = new LinkedList<BasicNameV ...

  2. php 使用 Memcache 例子

    代码写成后不断的往数据库插入数据,可以发现 当set时:理论上速度变慢,但数据同步 当get时:理论上速度变快,但数据不同步,需要缓存失效后重新请求set方法 <?php $mem = new ...

  3. jquery实现"跳到底部","回到顶部"效果

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...

  4. 消息队列Rabbitmq

    1. 启动 rabbitmq-server & 2. 队列重置(清空队列.用户等) rabbitmqctl stop_apprabbitmqctl resetrabbitmqctl stop ...

  5. 转: 利用 DEBUG_NEW 来追溯 Memory leak 内存泄漏

    参考: https://msdn.microsoft.com/en-us/library/tz7sxz99.aspx http://www.cnblogs.com/taoxu0903/archive/ ...

  6. MFC对话框Dialog控件处理程序handler因为public修饰符导致无法访问

    比如说你的Dialog有一个Button名为Confirm,对应IDC_CONFIRM,处理程序handler为OnConfirm 那么OnConfirm必须是protected属性,如果是publi ...

  7. defer 要放在return之前

    虽然defer可以在函数退出的时候执行,但是也要把它放在return之前,否则不会调用到. 错误的示范: res, err := Resource.open() if err != nil { ret ...

  8. 安装ECshop普遍问题的解决方法

    安装ecshop经常会出现以下问题: 1.Strict Standards: Non-static method cls_image::gd_version() should not be calle ...

  9. 修改最大打开文件数和最大proc数量

    1.vim /etc/profile  增加 ulimit -n 10240 ulimit -u 10240 2.修改/etc/security/limits.conf *      soft     ...

  10. Rs2008内存管理策略

    Rs2008 在内存管理方面已经有了很大的改变.主要增加了文件缓存,允许把内存数据卸载到文件缓存中.而Rs2005 都是把数据放到内存中.对于大数据量的报表而言,很容易出现OutOfMemory 错误 ...