> number = 2 number: Int = 2 在Scala中,建议使用val,除非你真的需要改变它的内容....备注 Scala中每个表达式都有一个类型 scala> val s = if(x > 0) "positive" else -1; s: Any = positive 上述表达式的类型是两个分支类型的公共超类型...if(x > 0) 1 那么有可能if语句没有输出值.但是在Scala中,每个表达式都应该有某种值.这个问题的解决方案是引入一个 Unit 类,写作 ().不带 else 的这个 if 语句等同于:...r = r * i } r } 上例中函数返回值为r的值 备注 虽然在函数中使用 return 并没有什么不对,我们还是最好适应没有 return 的日子.之后,我们会使用大量的匿名函数,这些函数中...return 并不返回值给调用者.它跳出到包含它的函数中.我们可以把 return 当做是函数版的 break 语句,仅在需要时使用.
以及 Unit(表示无值与C语言void等同,用作无返回值的方法的返回类型), Null(AnyRef的子类,null是它的唯一对象), Nothing(所有类型的子类,它没有对象), Any(所有其他类的超类...九,集合 集合是一种不可变的类型,并且是无顺序的,适合查找某个元素是否在集合中。 ? ? 十,映射Map 映射和Python中的字典很像,但是Scala中的Map是一种不可变类型。...函数的类型是函数的参数和返回值的类型映射关系, 如 Int => Unit , (Array[Int],String) => Int 。...二十六,Scala语言的设计哲学 1,一切皆对象 从整数,字符串,函数,类到各种数据结构,Scala中一切皆为对象,Any是它们的超类。...name是对象标识符,type是它的类型,{}括起来的作用域部分都是它的值。 从变量的定义,函数的定义,判断语句,循环语句到类的定义,都可以看成是这个格式省去某些部分的特例或语法糖等价书写形式。
:Unit 表示返回值类型为 Unit ,等价于 java 的 void // 5. = 表示 后面写的是函数体/方法体, 它还有返回值类型推导的作用 def main(args: Array[...1) Any 是所有类的根类型,即所有类的父类(基类) 2) 在 Scala中类分为两个大的类型分支(AnyVal [值类型,即可以理解成就是 java 的基本数据类型],AnyRef 类型)...bottom class ,是 AnyRef 的子类. 6) Nothing 类型是所有类的子类, 它的价值是在于因为它是所有类的子类,就可以将 Nothing 类型的对象返回给任意的变量或者方法...Any Any是所有其他类的超类 AnyRef AnyRef类是Scala里所有引用类(reference class)的基类 3、函数式编程 函数式编程基础 1) 函数定义/声明 2) 函数运行机制...它向调用者函数提供了此方法可能引发此异常的信息。 它有助于调用函数处理并将该代码包含在 try-catch 块中,以避免程序异常终止。
HM算法是基于全局类型进行推导的,但是Scala有些许不同,因为Scala需要支持面向对象编程,所以它选择了局部的基于程序流的方式。...Int = 3 这里体现了基于局部的类型推断的局限,Scala无法推断出sum函数的返回类型。...但是这样的处理方式会使得对子类型处理更加优雅。...1, foo) 我们可以通过局部的类型判断直接将异构的List判定为所有类型的父类Any。...sort1的类型推断出_>_的类型,自然就会报错了,而我们对sort1函数稍作修改: scala> def sort1[T](xs:List[T])(cp:(T,T) => Boolean) = {xs
偏函数 偏函数(Partial Function),是一个数学概念它不是"函数"的一种, 它跟函数是平行的概念。...Scala中的Partia Function是一个Trait,其的类型为PartialFunction[A,B],其中接收一个类型为A的参数,返回一个类型为B的结果。...is 1 pf1的结果返回类型必须和pf2的参数传入类型必须一致,否则会报错。...1.4 applyOrElse applyOrElse:它接收2个参数,第一个是调用的参数,第二个是个回调函数。如果第一个调用的参数匹配,返回匹配的值,否则调用回调函数。...先前的文章: Scala学习笔记(五) 抽象类以及类中的一些语法糖 Scala学习笔记(四) 类的初步 Scala学习笔记(三) Scala学习笔记(二) Scala学习笔记(一)
选择Scala 我决定了解Scala的原因是高并发,以及它与Java具备良好的互操作性,因此我试图在将来的项目中引入Scala,让其负责项目的并发处理模块。...混合 它强制使用自适应静态类型 它简洁而有表现力 它构建于一个微内核之上 但是 Scala为什么在国内不太火呢?...这点使得Scala既有动态语言的自由,又能在编译时发现不少类型错误。 函数值和闭包:函数可以当作参数传递给函数,可以从函数中返回,甚至可以在函数中嵌套,这些高阶函数称之为函数值。...Trait和类型转换:Trait就像一个拥有部分实现的接口,它提供了一个介于单一继承和多重继承的中间地带,我们可以在某个对象实例中混入某些Trait,也可以在某个类的所有实例中混入。...即使是没有压制异常,也破坏了Java应用的封装性。在Scala中,我们可以处理关心的异常,忽略其他的异常。
Unit :无返回值的函数类型,和void相对应 Nil :长度为0 的list Any所有类型的超类,任何实例都属于Any类型 AnyRef所有引用类型的超类 AnyVal所有值类型的超类 Nothing...class成为伴生类,class中的属性都是动态的,scala中的class类默认可以传参数,默认的传参数就是默认的构造函数。...object: 修饰的称为伴生对象;定义在object中的属性(字段、方法)都是静 态的,main函数写在里面;scala 中的object是单例对象,可以看成是定义静态的方法的类.object不可以传参数...②若想增加一个类的传入参数,则需要在声明的类中重写this构造函数,这样就可以在mian函数中声明有增加的属性的对象,当然原来的对象也可以声明。...:函数的参数是函数,或者函数的返回类型是函数,或者函数的参数和函数的返回类型是函数的函数。
用作不返回任何结果的方法的结果类型。Unit只有一个实例值,写成()。Nullnull 或空引用NothingNothing类型在Scala的类层级的最底端;它是任何其他类型的子类型。...AnyAny是所有其他类的超类AnyRefAnyRef类是Scala里所有引用类(reference class)的基类上表中列出的数据类型都是对象,也就是说scala没有java中的原生类型。...Null类是null引用对象的类型,它是每个引用类(继承自AnyRef的类)的子类。Null不兼容值类型。变量在 Scala 中,使用关键词 "var" 声明变量,使用关键词 "val" 声明常量。...因为它只允许保护成员在定义了该成员的的类的子类(继承)中被访问。而在java中,用 protected关键字修饰的成员,除了定义了该成员的类的子类可以访问,同一个包里的其他类也可以进行访问。...在子类中重写超类的抽象方法时,你不需要使用override关键字。Scala 使用 extends 关键字来继承一个类,继承会继承父类的所有属性和方法,Scala 只允许继承一个父类。
这个处理咋看之下非常奇怪,但这其实与 Java 的编程模型有关,在 Java 中,类型除了少数几个基本类型之外都是类类型,而我们无法像在 C++ 中那样直接操作类类型的值,我们只能隐式地操作指针,而这个...在 Python 中,表示 null 的对象就是 NoneType 的 None。这种处理会比 Java 在概念上纯粹一些。...因为你并不知道一个东西到底是一个具体的对象还是一个 null 值。一个函数说它会返回一个 String 类型的对象,这是真的吗?...在 Java 8 中,Java 也引入了这个处理方式,在 Java 中这个类型是 Optional 9,它也提供了类似的方式,但由于没用好用的语法糖,导致使用的时候没这么美观。...协变、逆变与不变 一文中谈过,Java 无法在参数化类型声明的时候指定其在其类型参数上的型变类型,相对于 Scala 中直观的写法,为了使用 Optional,在 Java 中我们必须要这样写: Optional
支持函数式编程的面向对象编程风格 函数式编程风格 如果你开发的项目主要用于处理数据,函数式编程风格更适用。 本文也主要针对函数式编程风格。 安装scala 可以从scala的官方网站上下载。...比如,你想在Scala的List类上,增加一个函数,而不用去修改Scala的发布包, 在Scala 2.10版以后,就可以通过implicit classes实现, 之前的版本,可以通过Pimp-my-library...在面向函数编程中,不要使用,用None代替。 None是一个None.type的实例,代替null。 在一个函数中,用于表达这个函数返回了没有值。...Unit是Scala中的一个类型,用于表示一个函数没有返回值。 有点像Java中的void,不过其实返回了'()'。...Nothing是Scala中的一个Trait。基本上没有用。(我猜的) ## 和 == 对 equals 和 hashCode 在Scala中, ##方法相当于Java中的hashCode方法。
尽管在C++里面这种编程风格是有可能的,但在我使用C++的日子里,我却没有考虑用这种方式进行多重继承,而我在C++设计中也不怎么使用抽象基类。...在过去的两年里,我有相当多的时间是用 Scala工作的,Scala是Java平台上的一种新的静态类型语言,它融合了面向对象编程和函数型程序设计的概念。...但 Scala 还让我以简洁和类型安全的方式获得某些通常是动态语言的好处,例如在已有类上增加新方法的能力,或者将类型传递给没有共同继承关系的方法。 Scala 是怎样改变了我对编程的看法的呢?...甚至于尽管本例中并无显式的类型标注, Scala 的类型推断机制也会给 nameHasUpperCase 赋予 Boolean 类型。...如果 exists 方法发现该函数因被传递的字符中的其中一个而返回 true— 比如说,其中一个字符是大写的 — 而返回 true 。否则就返回 false 。
Null 类型是 scalaNull 类型是 scala的特别类型,它只有一个值 null, 他是 bottom calss ,是 所有 AnyRef 类型的子 类....Nothing类型也是bottomclass,他是所有类的子类,在开发中通常可以将Nothing类型的值返回 给任意变量或者函数, 这里抛出异常使用很多. scala数据类型介绍 Scala 与 Java...有着相同的数据类型,在Scala中数据类型都是对象,也就是说scala没有java中的原生类型 Scala数据类型分为两大类 AnyVal(值类型) 和 AnyRef(引用类型), 注意:不管是AnyVal...用作不返回任何结果的方法的结果类型。Unit只有一个实例值,写成()。 Null null Nothing Nothing类型在Scala的类层级的最低端;它是任何其他类型的子类型。...Any Any是所有其他类的超类 AnyRef AnyRef类是Scala里所有引用类(reference class)的基类 Unit类型、Null类型和Nothing类型 - - Unit 表示无值
一致,需要一个类为运行主体,main函数为入口; 在方法定义上使用def关键字,同时是先指定入参,再指定出参,注意Unit表示函数没有返回值; 每行代码末尾的;可有可无,这与Python一致; 语言基础...,也就是java的void val nil:Null = null // 空值 // Nothing是所有其他类的子类 Any是所有其他类的超类 AnyRef是所有引用类的基类 var name = "...python列表推导式的方法:for (1 <- 1 to 10) yield i*10; 函数 准确的说,在Scala中函数和方法不完全等价,所谓的方法是类的一部分,而函数则是一个对象,可以赋值给一个变量...,我这里主要划分为以下几部分分别进行: Spark初始化以及数据加载; 数据预处理; 外部数据处理与链接; 特征工程; 建模; 可以看到基本以机器学习的各个环节为划分依据,方便出行问题进行debug,以我的经验主要工作在特征工程部份...主要是它涉及很多udf、列表推导式、SQL表达式、特征复杂处理等,需要注意: 对于udf部分,Scala中的入参指定类型这一点花了我不少时间,Python用多了就是惯坏了。。。
一致,需要一个类为运行主体,main函数为入口; 在方法定义上使用def关键字,同时是先指定入参,再指定出参,注意Unit表示函数没有返回值; 每行代码末尾的;可有可无,这与Python一致; 语言基础...,也就是java的void val nil:Null = null // 空值 // Nothing是所有其他类的子类 Any是所有其他类的超类 AnyRef是所有引用类的基类 var name = "...的for循环也支持类似python列表推导式的方法:for (1 <- 1 to 10) yield i*10; 函数 准确的说,在Scala中函数和方法不完全等价,所谓的方法是类的一部分,而函数则是一个对象...fib(f-1) println(fib(1),fib(2),fib(3),fib(4),fib(5)) // 在scala中,函数也是一种变量类型,因此也同样可以赋值为某个常量或者当作另一个函数的参数...主要是它涉及很多udf、列表推导式、SQL表达式、特征复杂处理等,需要注意: 对于udf部分,Scala中的入参指定类型这一点花了我不少时间,Python用多了就是惯坏了。。。
第一行 package 包名 scala导入包 import 包名 scala数据类型 与java基本相同 有几个不同的 Unit:和java的void类似,无返回值 Nothing:在scala...的类层级的最低端,是任何其他类型的子类型 Any:是其他所有类的超类 scala变量 var/val 变量名:数据类型=值 scala关键字 与java基本相同 private protected...public if…..else while do…while for scala函数 def 方法名称(参数:数据类型):返回值={方法体} 函数传名调用 函数可变参数 递归函数...类和对象 class 类名(类参数 变量:数据类型){ } 继承:只有主构造函数才可以往基类的构造函数里写参数。 子类重写非抽象方法的时候,必须使用override关键字。...Trait特征 相当于java的接口,与接口不同的是可以定义属性和方法的实现 模式匹配 传入值 match{ case 匹配值=>返回值 } 正则表达式 引用 scala.util.matching.Regex
java的除了原始类型的所有类都有一个默认的父类Object,那么scala的统一父类是什么呢?...这个是有人在群里问浪尖的一个问题,今天浪尖就给大家讲解一下Scala类型层次结构 在Scala中,所有的值都有类型,包括数值和函数。下图阐述了类型层次结构的一个子集。 ? 1....Scala类型层次结构 Any是所有类型的超类型,也称为顶级类 型。它定义了一些通用的方法如equals、hashCode和toString。Any有两个直接子类:AnyVal和AnyRef。...Unit是不带任何意义的值类型,它仅有一个实例可以像这样声明:()。所有的函数必须有返回,所以说有时候Unit也是有用的返回类型。 AnyRef代表引用类型。所有非值类型都被定义为引用类型。...在Scala中,每个用户自定义的类型都是AnyRef的子类型。如果Scala被应用在Java的运行环境中,AnyRef相当于java.lang.Object。
5、类构造器的调用顺序: 6、特质还可以继承类,该特质被实现时实现类自动继承特质的超类,假如我们的类已经扩展了另一个类,就必须该类是特质超类的超类。...一般unapply方法返回的是Option类型。 第十二章函数—函数即对象 1、Scala中函数是头等公民,就和数字一样可以作为变量一样作为参数和赋值给其他变量。...可变序列与java中的大体类似 4、列表:在Scala中列表要么是空的要么是一个head元素加上一个tail元素而tail元素又是一个链表,我的思路是:嵌套链表,以head开始tail嵌套。...Nothing =>" " } 6、Option类型:Scala中Option[T]类型是用来处理java中null值类型的,Option有两个子类型一个为None,一个位Some[T]。...比如map的get方法在java中可能返回为null而导致出现NullPointerException异常,而Scala中返回的是一个Option[T]类型当值不存在时为None,存在时返回Some(T
在 Scala 中声明变量和常量不一定要指明数据类型,在没有指明数据类型的情况下,其数据类型是通过变量或常量的初始值推断出来的。...map函数与faltMap这两个函数 map函数的用法,顾名思义,将一个函数传入map中,然后利用传入的这个函数,将集合中的每个元素处理,并将处理后的结果返回。...而flatMap与map唯一不一样的地方就是传入的函数在处理完后返回值必须是List,其实这也不难理解,既然是flatMap,那除了map以外必然还有flat的操作,所以需要返回值是List才能执行flat...这是因为Scala在伴生对象中定义了apply方法,该方法返回的是伴生类的对象。...2、只有主构造函数才可以往基类的构造函数里写参数。 3、在子类中重写超类的抽象方法时,你不需要使用override关键字。
领取专属 10元无门槛券
手把手带您无忧上云