高级类型 1. 视界(“类型类”) 有时候,你并不需要指定一个类型是等/子/超于另一个类,你可以通过转换这个类来伪装这种关联关系。一个视界指定一个类型可以被“看作是”另一个类型。...= 123 scala> val y: Int = "123" y: Int = 123 scala> math.max("123", 111) res1: Int = 123 //视界,就像类型边界...您可以使用类型限制,例如: scala> class Container[A <% Int] { def addIt(x: A) = 123 + x } defined class Container...可是 Scala 的数字类型并不都共享一个超类,所以我们不能使用T Scala 的 math 库对适当的类型 T 定义了一个隐含的 Numeric[T]。...> (new Container("123")).addIt res15: Int = 246 3.结构类型 Scala 支持结构类型 structural types — 类型需求由接口构造表示,而不是由具体的类型表示
Scala类型推导 之剑 2016.5.1 00:38:12 类型系统 什么是静态类型?为什么它们很有用?...Scala中的类型 Scala强大的类型系统让我们可以使用更具有表现力的表达式。...所有的类型变量在运行期必须是确定的。 对于静态类型的一个比较常见的缺陷就是有太多的类型语法。Scala提供了类型推导来解决这个问题。...Scala编译器自动推导参数的类型。注意我们也没有必要显示指定返回值的类型了。 型变 Scala的类型系统需要把类的继承关系和多态结合起来。类的继承使得类之间存在父子的关系。...基于流的类型推导在偏应用函数场景下,不能对参数类型省略 类型推导算法 类型推导(Type Inference)是现代高级语言中一个越来越常见的特性。其实,这个特性在函数式语言 中早有了广泛应用。
scala> def three() = 1 + 2 three: ()Int scala> three() res2: Int = 3 scala> three res3: Int = 3 1.匿名函数...scala> val addOne = (x: Int) => x + 1 addOne: (Int) => Int = scala> addOne(1) res4: Int...scala> def adder(m: Int, n: Int) = m + n adder: (m: Int,n: Int)Int scala> val add2 = adder(2, _:Int)...scala> multiply(2)(3) res0: Int = 6 //你可以填上第一个参数并且部分应用第二个参数。...scala> val timesTwo = multiply(2) _ timesTwo: (Int) => Int = scala> timesTwo(3) res1: Int
前言由于现在工作使用的技术栈是 React、TypeScript 和 ahooks,工作中需要用到大量的类型定义,特此记录一下一些常用的 类型通用API 封装。...T 类型中的 null 及 undefined 类型Parameters:获取函数的参数类型,将每个参数类型放在一个元组中Omit:从类型 T 中剔除 K 中的所有属性Pick:从类型 T 中挑选 K 中的所有属性Exclude:提取存在于 T,但不存在于 U 的类型组成的联合类型Extract:提取联合类型 T 和联合类型 U 的所有交集Record...:构造一个具有一组属性 K (类型 T )的类型TS 内置关键字extends:继承、泛型约束、条件类型infer:这玩意我到现在都还没搞懂keyof:将一个类型的属性名全部提取出来当做联合类型...typeof:在类型上下文中获取变量或者属性的类型in:常用来遍历枚举类型TS compiler 内部实现的类型Uppercase:构造一个将字符串转大写的类型Lowercase:构造一个将字符串转小写的类型
Scala 函数高级操作 1....字符串高级操作 val name = "Gwf" println(s"hello $name") val str = """ |这是一个多行字符串 |看到了吗 """.stripMargin println...匿名函数 // 直接定义 scala> (x:Int) => x+1 res19: Int => Int = // 赋值给变量 scala> val m1 = (x:Int)...=> x+1 m1: Int => Int = scala> m1(10) res20: Int = 11 // 赋值给函数 scala> def add = (x:Int,...y:Int)=>{x+y} add: (Int, Int) => Int scala> add(2,3) res21: Int = 5 3. currying 函数 def sum(a:Int,b:Int
类型参数 Scala 的类型参数其实意思与 Java 的泛型是一样的,也是定义一种类型参数,比如在集合,在类,在函数中,定义类型参数,然后就可以保证使用到该类型参数的地方,就肯定,也只能是这种类型。...Scala 自动推断泛型类型特性:直接给使用了泛型类型的 field 赋值时, Scala 会自动进行类型推断。...与泛型类一样,你可以通过给使用了泛型类型的变量传递值来让 Scala 自动推断泛型的实际类型,也可以在调用函数时,手动指定泛型类型。...Scala的上下边界特性允许泛型类型必须是某个类的子类,或者必须是某个类的父类。...) for(i <- 0 until food.length) foodPackage(i) = food(i) foodPackage } Existential Type 在 Scala
scala数据类型体系图如下 ?...从上图可以得到以下结论: 在 scala 中有一个根类型 Any ,他是所有类的父类. scala中一切皆为对象,分为两大类AnyVal(值类型),AnyRef(引用类型),他们都是Any子类....Nothing类型也是bottomclass,他是所有类的子类,在开发中通常可以将Nothing类型的值返回 给任意变量或者函数, 这里抛出异常使用很多. scala数据类型介绍 Scala 与 Java...有着相同的数据类型,在Scala中数据类型都是对象,也就是说scala没有java中的原生类型 Scala数据类型分为两大类 AnyVal(值类型) 和 AnyRef(引用类型), 注意:不管是AnyVal...相对于java的类型系统,scala要复杂些!也正是这复杂多变的类型系统才让面向对象编程和函数式编程完美的融合在了一起 scala数据类型列表 数据类型 描述 Byte 8位有符号补码整数。
Scala既存类型语法: 既存类型具有 T forSome {Q}的形式,Q 是一个类型声明的序列。设t1[tps1]>:L1:Ln类型(任何类型参数部分[tpsi]都可以没有)。每个类型 ti 的域都包含类型 T 和既存子句 Q。...通配符类型的形式为 _>:L:L 被忽略则>:scala.Nothing。如果上界scala.Any。...通配符类型是既存限定类型变量的简写,既存的限定条件是内涵的。 通配符类型只能作为参数化类型的类型参量出现。...通配符类型可以作为中缀类型,函数类型或元组类型的一部分出现。它们的扩展也就是等价参数化类型的扩展 列表中的后两个类型是等价的。
Scala的存在类型 存在类型也叫existential type,是对类型做抽象的一种方法。可以在你不知道具体类型的情况下,就断言该类型存在。 存在类型用_来表示,你可以把它看成java中的?。...那么为什么会需要存在类型呢?...我们看一下Seq类型的定义: type Seq[+A] = scala.collection.Seq[A] 从定义我们知道,Seq类型一定是需要一个类型参数的,如果我们这样写: def double...,但是double需要一个Seq类型。...你会在scala代码中看到很多Seq[_]的代码,存在类型的主要目的是为了兼容java代码。 更多教程请参考 flydean的博客
类型推断指的是程序语言有自动推断表达式数据类型的能力,而无需程序员指定数据类型,简化程序员的工作。如下面,可以指定a为Int类型,也可以让Scala推断出b为Int类型。...scala> val a:Int = 1 a: Int = 1 scala> val b = 1 b: Int = 1 对于类型推断算法最出名的应该是HM算法,大概意思就是先构建一棵包含全部元素的解析树...HM算法是基于全局类型进行推导的,但是Scala有些许不同,因为Scala需要支持面向对象编程,所以它选择了局部的基于程序流的方式。...Int = 3 这里体现了基于局部的类型推断的局限,Scala无法推断出sum函数的返回类型。...sort1的类型推断出_>_的类型,自然就会报错了,而我们对sort1函数稍作修改: scala> def sort1[T](xs:List[T])(cp:(T,T) => Boolean) = {xs
Scala整数类型 基本介绍 Scala的整数类型就是用于存放整数值的,比如 12 , 30, 3456等等 整型的类型 整型的使用细节 Scala各整数类型有固定的表数范围和字段长度,不受具体OS的影响...,以保证Scala程序的可移植性。...Scala的整型 常量/字面量 默认为 Int 型,声明Long型 常量/字面量 须后加‘l’’或‘L’ [反编译看] Scala程序中变量常声明为Int型,除非不足以表示大数,才使用Long var...c = 11 // c 就是Int类型 println("c=" + c) var d = 12l // d 就是 Long 类型 或者 var d = 12L println("d=" + d)
scala判断一个数据或者对象的类型只需要在该对象后面添加 .getClass.getSimpleName : scala> 222.getClass.getSimpleName res1: String...= int scala> "222".getClass.getSimpleName res2: String = String ?
的函数 4.Scala中的集合类型 -----------------------------------------------------------------------------------...-------------------------- Scala中的集合类型 Scala提供了一套很好的集合实现,提供了一些集合类型的抽象。...scala的集合类型(collection)涵盖了如下类型: 数组(Array)、链表(List)、Set、Map、Tuple。...后期常用的类型是定长(Array)。 2.Scala的泛型的声明使用[]来定义的,不同于Java的。 ...Map有两种类型,可变与不可变,区别在于可变对象可以修改它,而不可变对象不可以。 默认情况下Scala使用不可变Map。
海量【java和大数据的面试题+视频资料】整理在公众号,关注后可以下载~ 更多大数据技术欢迎和作者一起探讨~ Scala 与 Java有着相同的数据类型,下表列出了 Scala 支持的数据类型: 数据类型...用作不返回任何结果的方法的结果类型。Unit只有一个实例值,写成()。 Null null 或空引用 Nothing Nothing类型在Scala的类层级的最低端;它是任何其他类型的子类型。...Any Any是所有其他类的超类 AnyRef AnyRef类是Scala里所有引用类(reference class)的基类 上表中列出的数据类型都是对象,也就是说scala没有java中的原生类型...在scala是可以对数字等基础类型调用方法的。 Scala 基础字面量 Scala 非常简单且直观。接下来我们会详细介绍 Scala 字面量。...Scala.Null和scala.Nothing是用统一的方式处理Scala面向对象类型系统的某些"边界情况"的特殊类型。
文章目录 泛类型 型变 协变 逆变 不变 类型上界 类型下界 内部类 抽象类型 复合类型 自类型 隐式参数 隐式转换 多态方法 类型推断 Scala是静态类型的,它拥有一个强大的类型系统,静态地强制以安全...泛类型 和java一样,Scala也有泛型的概念,在scala里面泛型是使用方括号 [] 来接受类型参数的。通常使用字母A来作为参数标志符,当然你也可以使用其他任意的参数名称。...因为方法 prepend 中的参数 elem 是协变的 B 类型。 在scala中函数的参数类型是逆变的,而返回类型是协变的。...类型推断 Scala 编译器通常可以推断出表达式的类型,因此你不必显式地声明它。...当调用 多态方法 或实例化 泛型类 时,也不必明确指定类型参数。Scala 编译器将从上下文和实际方法的类型/构造函数参数的类型推断出缺失的类型参数。
相信很多人和我一样,在刚接触Scala时,会觉得Symbol类型很奇怪,既然Scala中字符串都是不可变的,那么Symbol类型到底有什么作用呢? ...简单来说,相比较于String类型,Symbol类型有两个比较明显的特点:节省内存和快速比较。在进入正题之前,让我们先来了解一下Java中String的intern()方法。...节省内存 在Scala中,Symbol类型的对象是被拘禁的(interned),任意的同名symbols都指向同一个Symbol对象,避免了因冗余而造成的内存开销。...Scala测试代码如下: val s = 'aSymbol //输出true println( s == 'aSymbol) //输出true println( s == Symbol("aSymbol...从这个角度看,Scala的Symbol类型不仅有效率上的提升,而且也简化了编码的复杂度。
Scala浮点类型 基本介绍 Scala的浮点类型可以表示一个小数,比如 123.4f,7.8 ,0.12等等 浮点型的分类 浮点类型 浮点型使用细节 与整数类型类似,Scala 浮点类型也有固定的表数范围和字段长度...Scala的浮点型常量默认为Double型,声明Float型常量,须后加‘f’或‘F’。
Scala布尔类型 布尔类型:Boolean 基本介绍 布尔类型也叫Boolean类型,Booolean类型数据只允许取值true和false boolean类型占1个字节。...boolean 类型适于逻辑运算,一般用于程序流程控制[后面详解]: if条件控制语句; while循环控制语句; do-while循环控制语句; for循环控制语句
Scala Unit类型、Null类型和Nothing类型 Unit类型、Null类型和Nothing类型 基本说明 使用细节和注意事项 Null类只有一个实例对象,null,类似于Java中的null...null可以赋值给任意引用类型(AnyRef),但是不能赋值给值类型(AnyVal: 比如 Int, Float, Char, Boolean, Long, Double, Byte, Short) Unit...类型用来标识过程,也就是没有明确返回值的函数。...Unit只有一个实例,(),这个实例也没有实质的意义 Nothing,可以作为没有正常返回值的方法的返回类型,非常直观的告诉你这个方法不会正常返回,而且由于Nothing是其他任意类型的子类,他还能跟要求返回值的方法兼容
1、通用类型简介 CLR中的一切都围绕类型展开,因为IL是面向对象的高级机器语言.类型向应用程序和其他类型公开了功能.通过类型,用一种编程语言写的代码能与另一种编程语言写的代码沟通.由于类型是...CLR的根本,所以MS制定了一个正式的规范来描述类型的定义和行为,这就是"通用类型系统"(Common Type System,CTS). 2、通用类型(CTS)规范 CTS规范规定,一个类型可以包含零个或者多个成员...签名指定参数数量(及其顺序).参数类型:方法是否有返回值,如果有返回值,还要指定返回值类型. (3)、属性 对于调用者,属性看起来像是字段.但对于类型的实现者,属性看起来像是一个方法(或者两个方法,get...具体请参考C# 事件 3、成员修饰符 通用类型系统(CTS)指定了类型可见性规则以及类型成员的访问规则.如下: (1)、public 如果将类型标记为public,那么任何程序集都能看见并访问该类型 (...、family(在C#中使用protected修饰符) 成员可由派生类型访问,不管那些类型是否在同一程序集中 (5)、protected internal 成员只能由同一程序集中的任何类型来访问.
领取专属 10元无门槛券
手把手带您无忧上云