1.二、Scala基础知识
2.scala manifeståclassmanifestçåºå«
3.Scala的Class、Object、Trait
二、Scala基础知识
适合阅读本教程的人员包括初学者和希望扩展Java知识体系的开发者,了解Scala基础知识对深入学习Scala及其在大数据和并行计算领域的大型综合管理系统源码应用尤为重要。 学习任务主要涉及Scala的解释器使用、基础语法、函数、条件与循环。Scala解释器
Scala解释器分为交互模式和脚本模式。交互模式允许开发者在命令行中直接运行Scala代码,如在命令行输入“scala”启动环境,然后执行命令输出如“Hello,ttm趋势线源码 World!”等简单操作。通过按CTRL+C退出交互模式。脚本模式则类似于执行Java程序,需要创建文件并指定目录,如`HelloWorld.scala`,通过命令行执行该文件以运行代码。基础语法
Scala语法规范与Java类似,学习者可参考Java相关规范。变量和常量声明遵循特定格式:常量使用`val`关键字,变量使用`var`。数据类型如`Int`、`String`等均为大写,与Java略有不同。数据类型
Scala中的ubuntu 的源码安装数据类型均为对象,无Java的原生基本类型。常见数据类型与Java一致,包括Byte、Short、Int、Long、Float、Double、Char、String、Boolean。此外,Scala引入了`Null`、财务收费软件 源码`Nothing`、`Any`、`AnyRef`等特殊类型,用于表示null、所有类的底端、所有类的超类和基类。关键字与标识符
Scala有个关键字,部分与Java重合。标识符以字母或下划线开头,可包含字母、数字或下划线。避免使用特殊字符如`$`,遵循驼峰式命名规则。同花顺全套指标源码函数与方法
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」,分享数据科学家的自我修养,既然遇见,不如一起成长。知识星球交流群。
2024-12-24 20:15
2024-12-24 19:40
2024-12-24 19:32
2024-12-24 19:14
2024-12-24 18:28
2024-12-24 18:18
2024-12-24 18:12
2024-12-24 17:53