随笔分类 - Scala学习与总结
摘要:当你声明了一个 case class,Scala 编译器为你做了这些: 创建 case class 和它的伴生 object 实现了 apply 方法让你不需要通过 new 来创建类实例 默认为主构造函数参数列表的所有参数前加 val 添加天然的 hashCode、equals 和 toString
阅读全文
摘要:1、隐式转换的时机: 1.当方法中的参数的类型与目标类型不一致时 2.当对象调用类中不存在的方法或成员时,编译器会自动将对象进行隐式转换 2、隐式解析机制 即编译器是如何查找到缺失信息的,解析具有以下两种规则: 1.首先会在当前代码作用域下查找隐式实体(隐式方法 隐式类 隐式对象) 2.如果第一条规
阅读全文
摘要:/** * Created by root * Description :隐式类: * 1.其所带的构造参数有且只能有一个;并且构造器的参数是转换之前的对象 * 2.隐式类必须被定义在类,伴生对象和包对象里 * 3.隐式类不能是case class(case class在定义会自动生成伴生对象与2矛盾) * 4.作用域内不能有与之相同名称的标示符 */ class ...
阅读全文
摘要:/** * Created by root * Description : 隐式转换调用类中本不存在的方法 */ class Person(name : String){ def getPersonName = println("name = " + name) } object Type2Type{ implicit def type2(a : ImplicitTest...
阅读全文
摘要:/** * Created by root * Description : 隐式值和隐式视图 */ object ImplicitTest { def main(args: Array[String]): Unit = { // 隐式值 implicit val str = "hello" def fun(implicit s: String) = p...
阅读全文
摘要:1、Scala单例对象 Scala单例对象是十分重要的,没有像在Java一样,有静态类、静态成员、静态方法,但是Scala提供了object对象,这个object对象类似于Java的静态类,它的成员、它的方法都默认是静态的。 如果object的静态成员要被外界访问,则该成员不能被private修饰
阅读全文
摘要:/** * Created by root * Description : Tuple and Map */ object MapTest { def main(args: Array[String]): Unit = { // 元组:Tuple,就是由()包起来,和数据库中一条记录概念类似 val t1 = (1,2) println(t1) ...
阅读全文
摘要:// 快速排序:它的基本思想是:通过一趟排序将要排序的数据分割成独立的两部分,其中一部分的所有数据都比另外一部分的所有数据都要小, // 然后再按此方法对这两部分数据分别进行快速排序,整个排序过程可以递归进行,以此达到整个数据变成有序序列。 def quickSort(a:List[Int]):List[Int]={ if (a.length a.head)...
阅读全文
摘要:// Stream:Stream is lazy List; // Stream惰性求值指它只确定第一个值,后面的值用到再求值,这样可以防止数据过大全部加载导致内存溢出 // 将Range转化成Stream val stream = (1 to 1000).toStream println(stream) // Stream(1, ?) println(strea...
阅读全文
摘要:// Range:to:默认步进为1 val to1 = 1 to 10 println(to1) // 定义一个不进为2的Range val to2 = 1 to 10 by 2 println(to2) println(to2.toList) // Range:until val until1 = 1 until 10 println(until1)...
阅读全文
摘要:/** * Created by root * Description : List */ object ListTest { def main(args: Array[String]): Unit = { println() } val a = List(1,2,3,4) for (i x % 2 ==0) println(e) // ...
阅读全文
摘要:/** * Created by root * Description : 柯里化函数,偏应用函数,匿名函数,高阶函数 */ object FunctionTest { def main(args: Array[String]): Unit = { //柯里化函数 def add(x:Int)(y:Int):Int= x + y //等价 def add(x:...
阅读全文
摘要:/** * Created by root * Description : 递归函数 */ object RecursionTest { def main(args: Array[String]): Unit = { // a到b的累加 def foo(a:Int,b:Int):Int ={ if (a > b) 0 else a + f...
阅读全文
摘要:/** * Created by root * Description :CallByValue:进入函数就得先计算实参的值;CallByName:函数体重使用到的时候才计算 */ object CallByValueAndCallByName { def main(args: Array[String]): Unit = { val c = add(1+2,3) ...
阅读全文
摘要:1、求值策略scala里有两种求值策略Call By Value -先对函数实参求值,在函数体中用这个求出的参数值。Call By Name -先不对函数实参求值,而是函数实参每次在函数体内被用到时都会求值。scala通常使用Call By Value 如果函数形参类型以 =>开头,那么就是在使用C
阅读全文
摘要:最近接触到spark,spark又是scala编写的,所以需要学习一下scala。 scala是面向对象的,一切皆为对象, 数值,函数都是对象。 println("Welcome to the Scala") /就这样进入scala学习模式了。。。。 1、变量 val x=10;自动转换类型为Int
阅读全文

浙公网安备 33010602011771号