所谓”结构类型“,指的是一组关于抽象方法、字段、类型的规格说明。
结构类型(structural type)为静态语言增加了部分动态特性,使得参数类型不再拘泥于某个已命名的类型,只要参数中包含结构中声明的方法或值即可。举例来说,java里对所有定义了close方法的抽象了一个
Closable
接口,然后再用
Closable
类型约束参数,而scala里可以不要求参数必须继承自
Closable接口
只需要包含
close
方法;如下:
scala> def free( res: {def close():Unit} ) {
res.close
scala> free(new { def close()=println("closed") })
closed
也可以通过type在定义类型时,将其声明为结构类型
scala> type X = { def close():Unit }
defined type alias X
scala> def free(res:X) = res.close
scala> free(new { def close()=println("closed") })
closed
上面传入参数时,都是传入一个实现close方法的匿名类,如果某个类/单例中实现了close方法,也可以直接传入
scala> object A { def close() {println("A closed")} }
scala> free(A)
A closed
scala> class R { def close()=print("ok") }
scala> val r = new R
scala> free(r)
结构类型还可以用在稍微复杂一点的“复合类型”中,比如:
scala> trait X1; trait X2;
scala> def test(x: X1 with X2 { def close():Unit } ) = x.close
上面声明test方法参数的类型为:
X1 with X2 { def close():Unit }
表示参数需要符合特质X1和X2同时也要有定义close
方法。对于“复合类型”下一篇再介绍。
转载自:http://hongjiang.info/scala/ 推荐大家阅读下这位大哥出版的书《Scala函数式编程》
结构类型(Structural Type)所谓”结构类型“,指的是一组关于抽象方法、字段、类型的规格说明。结构类型(structural type)为静态语言增加了部分动态特性,使得参数类型不再拘泥于某个已命名的类型,只要参数中包含结构中声明的方法或值即可。举例来说,java里对所有定义了close方法的抽象了一个Closable接口,然后再用Closable类型约束参数,而scala里可...
Scala 结构 1.0.0
用于内存优化结构的 Scala 库。
轻松地将固定大小的数据结构存储在字节缓冲区中,并在以后检索它们。 显着降低内存需求,尤其是在内存中必须保留大量小结构时。
作为依赖使用
配置您的 Maven、Gradle 或 SBT 构建脚本以使用 Sonatype OSS 发布存储库并将依赖项添加到 Scala Struct。
Gradle
repositories {
maven { url " https://oss.sonatype.org/content/repositories/releases " }
dependencies {
compile ' com.buransky:scala-struct:1.0.0 '
resolvers + = " Sonatype OSS Releases " at " https
结构类型结构类型(Struture Type)通过利用反射机制为静态语言添加动态特性,从面使得参数类型不受限于某个已命名的的类型.直接看代码,更理解理解
package com.dt.scala.moguyun/**
* Created by hlf on 2016/8/9.
* 结构体类型其实可以看作是一个类,在函数调用时,
* 直接通过new操作来创建一个结构体类型对象,当然它是匿名
维基百科定义的结构化类型
“结构类型系统(或基于属性的类型系统)是类型系统的主要类别,其中类型兼容性和对等性由类型的结构而不是由其他特征(例如其名称或声明的位置)确定”
Scala中的结构类型允许在某些特定情况下实现代码模块化,例如,如果某个行为是在多个类中实现的,则这些行为需要由类型的结构来调用。 这种方法仅出于调用单个重写方法的目的就排除了对抽象类或特征的需求。 结构化类型不仅增...
描述:通过利用反射机制为静态语言添加动态属性。从而使得参数类型不受限与某个已经命名的类型。结构体类型通过花括号{}进行定义,花括号中给出方法标签(抽象方法)在时用时候具体给出具体实现package cn.scala
object Scala_structure1 {
/** 结构体参数 */
def structure_method(red:{def close():Int }):I...
Scala:数据结构Scala 类型体系Scala 数据类型详解1.Numeric types:byte/short/int/long/float/double2.Boolean:true/false3.Char4.Unit5.Null6.Nothing7.String
Scala 类型体系
1.scala的根类是Any,
Any是scala所有类的父类,
Any下面有两个子类:AnyVal、...
nullable: Boolean = true,
metadata: Metadata = Metadata.empty) {}
-----A field inside a StructType
Scala具有丰富的数据结构类型, 结构类型:定义一个方法,该方法的入参是一个匿名类型对象,该类包含若干个函数或方法,这样就可以定义一个具有结构类型的方法,
当调用该方法时传入具有具体实现方法的结构类型对象
1、函数的入参类型是一个匿名类型(我们自己可以定义)
2、通过type类型定义匿名类型实例对象
语言特性:基本语言的灵活性、简洁性,语法非常强大、非常
1,Scala支同时持可变集合和不可变集合,不可变集合可以安全的并发访问
不可变集合:scala.collection.immutable(Scala默认采用不可变集合)
可变集合:scala.collection.mutable
2,Scala的集合有三大类
序列seq(有序的,Linear Seq)
映射Map[key -> value]
初学者会有点不明白,什么时...
在其他语言中也有javasctipt、ruby
动态语言中有一种知名的鸭子类型:如果看起来像鸭子,走起来像鸭子叫起来也像鸭子的话,我们就认为是鸭子。
结构类型是指一组关于抽象的方法或字段或类型的规格的说明,
这种抽象的方法或字段或类型是我们传进参数或使用相关的对象必须具备的。
class Structura
所谓”结构类型“,指的是一组关于抽象方法、字段、类型的规格说明。
结构类型为静态语言增加了部分动态特性,使得参数类型不再拘泥某个已命名的类型。只要参数中包含结构中声明的方法或值即可。
举例来说,Java里的接口Closeable(只有一个抽象方法close())-对所有定义了close方法的抽象;我们就可以Closeable类型约束参数。在Sc