本站提供最佳棋牌源码能买吗服务,欢迎转载和分享。

【易语言制作安装包源码】【原生app源码打包】【语音社交平台源码】scala AnyRef源码

2024-12-29 14:29:54 来源:610页网页源码 分类:探索

1.二、Scala基础知识
2.scala manifest和classmanifest的区别
3.Scala的Class、Object、Trait

scala AnyRef源码

二、Scala基础知识

       适合阅读本教程的人员包括初学者和希望扩展Java知识体系的开发者,了解Scala基础知识对深入学习Scala及其在大数据和并行计算领域的易语言制作安装包源码应用尤为重要。

       学习任务主要涉及Scala的解释器使用、基础语法、函数、条件与循环。

       Scala解释器

       Scala解释器分为交互模式和脚本模式。交互模式允许开发者在命令行中直接运行Scala代码,如在命令行输入“scala”启动环境,然后执行命令输出如“Hello,原生app源码打包 World!”等简单操作。通过按CTRL+C退出交互模式。脚本模式则类似于执行Java程序,需要创建文件并指定目录,如`HelloWorld.scala`,通过命令行执行该文件以运行代码。

       基础语法

       Scala语法规范与Java类似,学习者可参考Java相关规范。变量和常量声明遵循特定格式:常量使用`val`关键字,变量使用`var`。数据类型如`Int`、`String`等均为大写,与Java略有不同。

       数据类型

       Scala中的语音社交平台源码数据类型均为对象,无Java的原生基本类型。常见数据类型与Java一致,包括Byte、Short、Int、Long、Float、Double、Char、String、Boolean。此外,Scala引入了`Null`、简约网站维护源码`Nothing`、`Any`、`AnyRef`等特殊类型,用于表示null、所有类的底端、所有类的超类和基类。

       关键字与标识符

       Scala有个关键字,部分与Java重合。标识符以字母或下划线开头,可包含字母、数字或下划线。避免使用特殊字符如`$`,遵循驼峰式命名规则。python粉丝源码大全

       函数与方法

       Scala中的函数和方法类似,但函数可以作为值赋给变量,方法则不行。函数定义包含参数列表、返回类型和方法体,方法调用遵循Java的规则。函数和方法之间可以相互转换,使用特殊语法实现。

       条件与循环

       条件语句采用`if-else`形式,可省略`else if`和`else`。循环包括`while`、`do...while`和`for`循环,与Java相似。`for`循环具有强大的推导式功能,允许生成和处理集合。

       结束阅读后,请完成课后作业,如有版权问题,请联系邮箱或微信。

scala manifest和classmanifest的区别

       Manifest是scala2.8引入的一个特质,用于编译器在运行时也能获取泛型类型的信息。在JVM上,泛型参数类型T在运行时是被“擦拭”掉的,编译器把T当作Object来对待,所以T的具体信息是无法得到的;为了使得在运行时得到T的信息,scala需要额外通过Manifest来存储T的信息,并作为参数用在方法的运行时上下文。

       def test[T] (x:T, m:Manifest[T]) { ... }

       æœ‰äº†Manifest[T]这个记录T类型信息的参数m,在运行时就可以根据m来更准确的判断T了。但如果每个方法都这么写,让方法的调用者要额外传入m参数,非常不友好,且对方法的设计是一道伤疤。好在scala中有隐式转换、隐式参数的功能,在这个地方可以用隐式参数来减轻调用者的麻烦。

       èŽ·å–class manifests的两种基本方式:

        1 def classOf[T <: Any](implicit m: scala.reflect.Manifest[T]): Class[T] = m.erasure.asInstanceOf[Class[Tï¼½

        通过implicit m: scala.reflect.Manifest[T]声明一个隐式参数,这样scala编译器能在编译时提供T的类型信息了

        2 def classOf[T <: Any : Manifest] : Class[T] = manifest[T].erasure.asInstanceOf[Class[Tï¼½

        其中 T <: Any : Manifest,拆分成两部分来看

        T <: Any

        T 是Any的子类型(即可以是任意基本类型scala.AnyVal 和引用类型 scala.AnyRef)

        T : Manifest 相当于对classOf 方法currying

        隐式增加参数列表如下:(implicit evidence$1: Manifest[T]),

        通过manifest[T] 方法即可获取Manifest实例

        可见形式1 和形式2实质是一样的。

       åº”用:

        1最常见的是获取类型参数的Class,形如someMethod[Type]

        如akka中源码: def actorOf[T <: Actor : Manifest]: ActorRef = actorOf(manifest[T].erasure.asInstanceOf[Class[_ <: Actorï¼½)

        class Worker extends Actor {

        def receive = {

        case Work(start, nrOfElements) =>

        self reply Result(calculatePiFor(start, nrOfElements)) // perform the work

        }

        }

        就可以如此使用了: val workerActorRef = actorOf[Worker]

        2 编程方式创建范型数组

        def evenElems[T: ClassManifest](xs: Vector[T]): Array[T] = {

        val arr = new Array[T]((xs.length + 1) / 2)

        for (i <- 0 until xs.length by 2)

        arr(i / 2) = xs(i)

        arr

        }

        scala> evenElems(Vector("a","b","c"))

        res: Array[java.lang.String] = Array(a, c)

Scala的Class、Object、Trait

       开发环境

       使用ideaIU或ideaIC,通过File-Setting-Plugins搜索并在线安装scala插件,或下载后离线安装。在Project Structure中添加scala-sdk,作为全局库。

       基础

       在scala中,break和continue的实现用于跳出循环,0 until 表示0到9,不含,而0 to 表示0到,含。可以使用Java的类库。

       类Class、Object、Trait

       类class里无static类型,属性和方法必须通过new的对象来调用,即使有main主函数也没用。Object的特点是构造函数和Bean属性,可以定义getter和setter方法。

       实现同个类既有普通方法又有静态方法?

       通过伴生对象可以实现,伴生对象可以访问类的私有成员,且javap BanSheng.class反编译后,伴生对象的apply方法与单例模式相关。

       继承

       Scala中的类继承自Any超类,所有类都是Any的子类,因此定义在Any中的方法可以被任何对象调用。Any有两个子类:AnyVal和AnyRef。AnyVal是值类的父类,包含基本类型,而AnyRef是引用类的基类,相当于Java的Object。

       Scala类与Java类的不同在于它们继承自ScalaObject特质,以提高执行效率。处理边界情况的特殊类型是scala.Null和scala.Nothing。

       Trait特质

       Scala的Trait类似Java的Interface,但不仅定义函数,还可以实现函数体。通过extends关键字继承多个Trait,使用with实现多个Trait。当多个Trait中有相同函数时,子类必须重写该函数。

       案例1和案例2

       详细内容涉及反编译后的代码,需要具体代码示例以展示实现效果。

       本文首发于steem,感谢阅读,转载请注明。微信公众号「padluo」,分享数据科学家的自我修养,既然遇见,不如一起成长。知识星球交流群。

【本文网址:http://abssuliao.net/html/08e431395678.html 欢迎转载】

copyright © 2016 powered by 皮皮网   sitemap