其中Unit是一个比较特别的类型。可以把他看成java里面的void。因为Scala中所有的函数必须要有返回类型,当一个函数实在没有返回的时候,就用Unit吧。 AnyRef表示的是引用类型。...所有的非值的类型都是引用类型。并且所有的用户自定义类型都是AnyRef类型的子类。在Java环境中,AnyRef相当于Java里面的java.lang.Object。...这里我们还重写了AnyRef里面的toString方法。...set to 0 val point1 = new Point(1) println(point1.x) // prints 1 主构造方法中带有val和var的参数是公有的。...override def next(): Int = { if (hasNext) { val t = current current += 1 t
对比Function和Partial Function,更学术味的解释如下: 对给定的输入参数类型,函数可接受该类型的任何值。...换句话说,一个(Int) => String 的函数可以接收任意Int值,并返回一个字符串。 对给定的输入参数类型,偏函数只能接受该类型的某些特定的值。...) -T1, @specialized(scala.Unit, scala.Boolean, scala.Int, scala.Float, scala.Long, scala.Double, scala.AnyRef...(x, PartialFunction.empty) } apply()方法内部调用了PartialFunction的applyOrElse()方法。...这个empty等于类型为PartialFunction[Any, Nothong]的值empty_pf,定义如下: private[this] val empty_pf: PartialFunction
例如,在数学里,我们经常看到下面的函数: f: R -> N 这个定义告诉我们函数”f”的作用是把实数集里的数映射到自然集里。 抽象地说,这才是具体意义上的类型。...一些主要的特点如下: 支持参数多态,泛型编程 支持(局部)类型推导,这就是你为什么不需要写val i: Int = 12: Int 支持存在向量(existential quantification),...函数式语言里比较经典的类型推导的方法是 Hindlry-Milner,并且它是在ML里首先使用的。 Scala的类型推导有一点点不同,不过思想上是一致的:推导所有的约束条件,然后统一到一个类型上。...4 ) listDropped的值是List(4,5) 我们用大脑可以轻易判断, 当list: List[A] 中的类型A在mylist声明的时候已经指定了Int, 那么很明显, 在第二个参数中,我们的...) val droppedList = dropWhile( mylist ) ( x => x < 4 ) 注意, x参数没有指定Int类型, 因为编译器直接通过mylist的泛型信息Int推导出x
xs(x) = b ( 同 xs.update(x, b) )参数 b 为布尔类型,如果值为 true 就把元素x加入集合 xs,否则从集合 xs 中删除 x。...List 通过List伴生对象的apply方法来创建实例: List("A","B") 过程发生了什么 首先,List伴生对象的apply方法接收的是一个可变参数列表,即数组: override def...apply[A](xs: A*): List[A] = xs.toList 而我们传入的Array("A","B")数组会被隐式转换为 WrappedArray 的子类型,随后对这个WrappedArray...的子类型ofRef[String]类型,调用 toList 方法 不过在进行toList时用到了隐式参数CanBuildFrom,我们先看一下List伴生对象中定义的,用于生成CanBuildFrom...信息的隐式 也就是说这个隐式参数构造出来的新容器类型是 ListBuffer 的子类型。
比如定义class List[T] {}, 可以有List[Int] 和 List[String]等具体类型,它们的类是同一个List,但类型则根据不同的构造参数类型而不同。...def foo(b: A#B) 结构类型 结构类型(structural type)为静态语言增加了部分动态特性,使得参数类型不再拘泥于某个已命名的类型,只要参数中包含结构中声明的方法或值即可。...开发交集类型 X or Y or Z 是并集类型,但是scala目前并不支持,可以使用隐式转换来实现 class StringOrInt[T] object StringOrInt { implicit...class List[T] 第一个是类型构造器,第二个是类型参数 java 不支持类型参数任然是 泛型, 但是scala支持类型参数是泛型 值类型 默认值类型 Int,Unit,Double ,创建好数组后...Null与Nothing scala 类型系统以Any为根,分为AnyRel和AnyVal 两个分支体系,在AnyRef 底层有一个Null的子类型,它被当做AnyRef的子类型,在两个分支的最底层类型是
假如我们定义一个class C[+A] {} ,这里A的类型参数是协变的,这就意味着在方法需要参数是C[AnyRef]的时候,我们可以是用C[String]来代替。...同样的道理如果我们定义一个class C[-A] {}, 这里A的类型是逆变的,这就意味着在方法需要参数是C[String]的时候,我们可以用C[AnyRef]来代替。...注意:变异标记只有在类型声明中的类型参数里才有意义,对参数化的方法没有意义,因为该标记影响的是子类继承行为,而方法没有子类。...[B] = {...} ... } 这里方法map的类型参数B是不能使用变异标记的,如果你修改其变异标记,则会返回编译错误。...接下来我们考虑scala内置的带一个参数的函数类型Function1,其简化的定义如下: trait Function1[-T1, +R] extends AnyRef { self => /**
序号 方法和描述 1 def apply( x: T, xs: T* ): Array[T]创建指定对象 T 的数组, T 的值可以是 Unit, Double, Float, Long, Int,...2 def concat[T]( xss: Array[T]* ): Array[T]合并数组 3 def copy( src: AnyRef, srcPos: Int, dest: AnyRef, destPos...4 def empty[T]: Array[T]返回长度为 0 的数组 5 def iterate[T]( start: T, len: Int )( f: (T) => T ): Array[T]返回指定长度数组...fill[T]( n: Int )(elem: => T): Array[T]返回数组,长度为第一个参数指定,同时每个元素使用第二个参数进行填充。...7 def fill[T]( n1: Int, n2: Int )( elem: => T ): Array[Array[T]]返回二数组,长度为第一个参数指定,同时每个元素使用第二个参数进行填充。
= 123 scala> val y: Int = "123" y: Int = 123 scala> math.max("123", 111) res1: Int = 123 //视界,就像类型边界...^ 2.其他类型限制 方法可以通过隐含参数执行更复杂的类型限制。...可是 Scala 的数字类型并不都共享一个超类,所以我们不能使用T 的 math 库对适当的类型 T 定义了一个隐含的 Numeric[T]。...在没有设定陌生的对象为 Numeric 的时候,方法可能会要求某种特定类型的“证据”。...scala> def foo(x: { def get: Int }) = 123 + x.get foo: (x: AnyRef{def get: Int})Int scala> foo(new {
隐式转换有四种常见的使用场景: 将某一类型转换成预期类型 类型增强与扩展 模拟新的语法 类型类 语法 隐式转换有新旧两种定义方法,旧的定义方法指是的“implict def”形式,这是Scala 2.10...前文提到,隐式转换最为基本的使用场景是:将某一类型转换成预期类型,所以我们下面的例子就以最这种最简单的场景来演示,它们都实现了:将一个String类型的变量隐式转换为Int类型: “implict def...定义如下: 假如T是这样定义的:T with A with B with C,那么A, B, C的伴生对象都是T的搜索区域。 如果T是类型参数,那么参数类型和基础类型都是T的搜索部分。...比如对于类型List[Foo],List和Foo都是搜索区域 如果T是一个单例类型p.T,那么p和T都是搜索区域 如果T是类型注入p#T,那么p和T都是搜索区域。...隐含参数有点类似缺省参数,如果在调用方法时没有提供某个参数,编译器会在当前作用域查找是否有符合条件的 implicit 对象可以作为参数传入,不同于缺省参数,隐式参数的值可以在方法调用的前的上下文中指定
用作不返回任何结果的方法的结果类型。Unit只有一个实例值,写成()。 Null null 或空引用 Nothing Nothing类型在Scala的类层级的最低端;它是任何其他类型的子类型。...Any Any是所有其他类的超类 AnyRef AnyRef类是Scala里所有引用类(reference class)的基类 上表中列出的数据类型都是对象,也就是说scala没有java中的原生类型...在scala是可以对数字等基础类型调用方法的。 Scala 基础字面量 Scala 非常简单且直观。接下来我们会详细介绍 Scala 字面量。...Scala.Null和scala.Nothing是用统一的方式处理Scala面向对象类型系统的某些"边界情况"的特殊类型。...Null类是null引用对象的类型,它是每个引用类(继承自AnyRef的类)的子类。Null不兼容值类型。
类 图片展示了Scala的类层次结构。每一个类都继承自scala.Any,Any的子类可以划分为两个主要的范畴:值类型,继承自scala.AnyVal;引用类型,继承scala.AnyRef。...每一种Java的基本数据类型对应于值类型,通过预定义的类型别名进行映射,而AnyRef则对应于Java环境中的根类:java.lang.Object。...由于Null不是任何值类型的子类,所以null也不是任何值类型的实例,因此把null赋值给int型变量是错的。...Nothing是所有其它类型的子类,这个类没有任何实例,但是它可以作为类型参数体现价值,比如Nil就是List[Nothing]的实例,而Scala中List是协变的,从而对于所有的类型T,Nil 都是...List[T]的实例。
Route是个类型: type Route = RequestContext ⇒ Future[RouteResult] 实际上就是个把HttpRequest转换成HttpResponse的函数。...Route通过并拒绝其它不符合条件的Route 3、链接Route:假如一个Route被拒绝,尝试下一个Route。...implicit class SingleValueModifiers[T](underlying: Directive1[T]) extends AnyRef { def map[R](f:...⇒ predicate(value) }, rejections: _*) } } 注意Directive.apply参数f: (T =>Route)=>Route), 代表 dirname (args...[L] { L => route } //Directive1[L] dirname[T] { (T1,T2...) => route} //Directive[T] 任何类型值到
1) Any 是所有类的根类型,即所有类的父类(基类) 2) 在 Scala中类分为两个大的类型分支(AnyVal [值类型,即可以理解成就是 java 的基本数据类型],AnyRef 类型)...bottom class ,是 AnyRef 的子类. 6) Nothing 类型是所有类的子类, 它的价值是在于因为它是所有类的子类,就可以将 Nothing 类型的对象返回给任意的变量或者方法...Null null 可以赋值给任意引用类型(AnyRef),但是不能赋值给值类型 Nothing Nothing类型在Scala的类层级的最低端;它是任何其他类型的子类型。...类型的作用域是指与该类型相关联的全部伴生模块,一个隐式实体的类型 T 它的查找范围如下( 第二种情况范围广且复杂在使用时,应当尽量避免出现): a) 如果 T 被定义为 T with A with...b) 如果 T 是参数化类型,那么类型参数和与类型参数相关联的部分都算作 T 的部分,比如 List[String]的隐式搜索会搜索 List 的伴生对象和 String 的伴生对象。
T extends U ? X : Y列举例子如下:其中TypeName为条件类型,根据T的具体类型返回不同类型的字符串,也就是字面量类型。...| {}> // "function" | "object"二、分布式条件类型在条件类型中,如果被检查的类型是一个 “裸” 类型参数,即没有被数组、元组或 Promise 等包装过,则该条件类型被称为分布式条件类型..."X" : "Y";type WrappedArrayT> = T[] extends boolean[] ?... 中 string | boolean 不是 boolean 类型,也不是其他原始类型//T[] extends boolean[]//WrappedArray 中 string | boolean 不是 boolean 类型,也不是其他原始类型四、结合范型使用1.类型删除在联合类型T中删除联合类型U中的成员,T类型中的剩余成员则组成新的类型
Scala 2.8预计的特性包括重写的Scala类库(Scala collections library)、方法的命名参数和默认参数、包对象(package object),以及Continuation...scala类型系统以Any为根,分为AnyRef和AnyVal 两个分支体系,在AnyRef分支的最底层,有个Null类型的特殊类型,它被当作是所有AnyRef类型的子类型。...更进一步在两个分支共同的最底层类型是Nothing类型,它被当作所有AnyRef和AnyVal类型的子类型。...a (error :type mismatch)Boolen 类型 false true Null类型 Null类型只有一个唯一的值:null,可以被赋给所有的AnyRef类型变量List(Null,...比如使用foreach方法来实现循环,如下: args.foreach(arg => println(arg)) 该表达式,调用args的foreach方法,传入一个参数,这个参数类型也是一个函数(lambda
Scala 2.8预计的特性包括重写的Scala类库(Scala collections library)、方法的命名参数和默认参数、包对象(package object),以及Continuation...scala类型系统以Any为根,分为AnyRef和AnyVal 两个分支体系,在AnyRef分支的最底层,有个Null类型的特殊类型,它被当作是所有AnyRef类型的子类型。...更进一步在两个分支共同的最底层类型是Nothing类型,它被当作所有AnyRef和AnyVal类型的子类型。...高精度类型 a (error :type mismatch) Boolen 类型 false true Null类型 Null类型只有一个唯一的值:null,可以被赋给所有的AnyRef类型变量List...比如使用foreach方法来实现循环,如下: args.foreach(arg => println(arg)) 该表达式,调用args的foreach方法,传入一个参数,这个参数类型也是一个函数(lambda
https://segmentfault.com/a/1190000004854613 类型系统 引用类型 AnyRef 的子类 使用new 构造对象 当存在默认构造函数,可以略去括号 AnyRef...Null 与null Null 是所有AnyRef 的子类型,存在唯一的实例null 。不能将null 赋予「值类型」,例如Int, Boolean 等。...val t1 = (1, "two")val t1: (Int,String) = (1, "two")val t2: Tuple2[Int,String] = (1, "two") 函数值 (i:...字面值的类型定义常常用于类型声明,如下三个变量定义是相同的: val f1: (Int, String) => String = (i, s) => s + ival f2 = (i: Int, s:...,r 并非java.lang.String 的方法,Scala 拥有一套完备的机制增强既有类库的能力。
2 def concat[T]( xss: Array[T]* ): Array[T] 合并数组 3 def copy( src: AnyRef, srcPos: Int, dest:...AnyRef, destPos: Int, length: Int ): Unit 复制一个数组到另一个数组上。...4 def empty[T]: Array[T] 返回长度为 0 的数组 5 def iterate[T]( start: T, len: Int )( f: (T) => T ): Array... def fill[T]( n: Int )(elem: => T): Array[T] 返回数组,长度为第一个参数指定,同时每个元素使用第二个参数进行填充。...7 def fill[T]( n1: Int, n2: Int )( elem: => T ): Array[Array[T]] 返回二数组,长度为第一个参数指定,同时每个元素使用第二个参数进行填充
[Map[String, AnyRef]] { override def process(t: Map[String, AnyRef], runtimeContext: RuntimeContext..., requestIndexer: RequestIndexer): Unit = { val map: util.Map[String, AnyRef] = t.asJava..., es容错需配合flink 检查点使用 //设置最大并行度 //esSinkBuilder.setBulkFlushMaxActions(1) //设置es sink 的参数...(3) //重试策略,又可以分为以下两种类型 //a、指数型,表示多次重试之间的时间间隔按照指数方式进行增长。...如果聚合前每个元素数据类型是T,聚合后的数据类型仍为T。 aggregation 常见的聚合操作有sum、max、min等,这些聚合操作统称为aggregation。
领取专属 10元无门槛券
手把手带您无忧上云