泉州网站模板建站3000部末年禁止无需下载

bicheng/2026/1/26 16:06:14/文章来源:
泉州网站模板建站,3000部末年禁止无需下载,湖南省博物馆网站建设,网站建设初学原想简单笼统介绍一下scala#xff0c;后感觉这么做意思不大#xff0c;网友看了和没看一样#xff0c;还是应该稍微详细具体一点#xff0c;故而把系列编号由(上)(中)(下)#xff0c;改为(上)(2)(3)(4)(5)....,(上)就是(1)吧#xff0c;以下内容部分节选于我们即将出版的… 原想简单笼统介绍一下scala后感觉这么做意思不大网友看了和没看一样还是应该稍微详细具体一点故而把系列编号由(上)(中)(下)改为(上)(2)(3)(4)(5)....,(上)就是(1)吧以下内容部分节选于我们即将出版的书稿本次推文介绍scala里的类用法在Scala里类是用关键字“class”来定义一旦定义完成就可以通过“new 类名”的方式来构造一个对象。而这个对象的类型就是这个类。换句话说一个类就是一个类型不同的类就是不同的类型。在后续会讲到类的继承关系以及超类、子类和子类型多态的概念。在类里可以定义val或var类型的变量它们被称为“字段”还可以定义“def”函数它们被称为“方法”字段和方法统称“成员”。字段通常用于保存对象的状态或数据而方法则用于承担对象的计算任务。字段也叫“实例变量”因为每个被构造出来的对象都有其自己的字段。在运行时操作系统会为每个对象分配一定的内存空间用于保存对象的字段。方法则不同对所有对象来说方法都是一样的程序段因此不需要为某个对象单独保存其方法。而且方法的代码只有在被调用时才会被执行如果一个对象在生命周期内都没有调用某些方法那么完全没必要浪费内存为某个对象去保存这些无用的代码。外部想要访问对象的成员时可以使用句点符号“ . ”通过“对象.成员”的形式来访问。此外用new构造出来的对象可以赋给变量让变量名成为该对象的一个指代名称。需要注意的是val类型的变量只能与初始化时的对象绑定不能再被赋予新的对象。一旦对象与变量绑定了便可以通过“变量名.成员”的方式来多次访问对象的成员。例如    scala class Students {             |    var name None             |    def register(n: String) name n             |  }    defined class Students    scala val stu new Students stu: Students Students1a2e563e    scala stu.name    res0: String None    scala stu.register(Bob)    scala stu.name    res2: String Bob    scala stu new Students    :13: error: reassignment to val           stu new StudentsScala的类成员默认都是公有的即可以通过“对象.成员”的方式来访问对象的成员而且没有“public”这个关键字。如果不想某个成员被外部访问则可以在前面加上关键字“private”来修饰这样该成员只能被类内部的其他成员或上篇提到的伴生对象来访问外部只能通过其他公有成员来间接访问。例如    scala class Students {             |    private var name None             |    def register(n: String) name n             |    def display() println(name)             |  }    defined class Students    scala val stu new Students    stu: Students Students75063bd0    scala stu.register(Bob)    scala stu.name    :13: error: variable name in class Students cannot be accessed in Students           stu.name              ^     scala stu.display    Bob类的构造方法   1、主构造方法在C、Java、Python等面向对象语言里类通常需要定义一个额外的构造方法(构造函数)。这样要构造一个类的对象除了需要关键字new还需要调用构造方法。事实上这个过程中有一些代码是完全重复的。Scala则不需要显式定义构造方法 而是把类内部的非字段、非方法的代码都当作“主构造方法”。而且类名后面可以定义若干个参数列表用于接收参数这些参数将在构造对象时用于初始化字段并传递给主构造方法使用。Scala的这种独特语法减少了一些代码量。例如    scala class Students(n: String) {          |    val name n          |    println(A student named n has been registered.)          |  }    defined class Students    scala val stu new Students(Tom)    A student named Tom has been registered.    stu: Students Students5464eb28在这个例子中Students类接收一个String参数n并用n来初始化字段name。这样做就无需像之前那样把name定义成var类型而是使用函数式风格的val类型而且不再需要一个register方法在构造对象时来更新name的数据。函数println既不是字段也不是方法定义 n也不是字段也不是方法定义所以都被当成是主构造函数的一部分。在构造对象时主构造函数被执行因此在解释器里会打印了相关信息。   2、辅助构造方法除了主构造方法scala还可以定义若干个辅助构造方法。辅助构造方法都是以“def this(..)”来开头的而且第一步行为必须是调用该类的另一个构造方法即第一条语句必须是“this(...)”——要么是主构造方法要么是之前的另一个辅助构造方法。这种规则的结果就是任何构造方法最终都会调用该类的主构造方法(而主构造方法其实就是类定义本身)使得主构造方法成为类的单一入口。例如    scala class Students(n: String) {        |val name n        |def this() this(None) //辅助构造方法是无参数的其内部调用主构造方法        |println(A student named n has been registered.)        |  }    defined class Students    scala val stu new Students    A student named None has been registered.    stu: Students Students64105ca4在这个例子中定义了一个辅助构造方法该方法是无参的其行为也仅是给主构造方法传递一个字符串“None”。定义此辅助构造方法的作用当创建该类的实例对象时如果缺省了参数这样与主构造方法的参数列表是不匹配的但是与辅助构造方法匹配则系统会使用stu的辅助构造方法构造该实例对象。Scala只允许主构造方法调用超类的构造方法,不允许辅助构造函数调用超类的构造方法(后续具体讲解)。这种限制源于Scala为了代码简洁性与简单性做出的折衷处理。   3、无析构函数因为Scala没有指针同时使用了Java的垃圾回收器所以不需要像C那样定义析构函数。   4、私有主构造方法如果在类名与类的参数列表之间加上关键字“private”那么主构造方法就是私有的只能被内部定义的辅助构造函数访问外部代码实列化对象时就不能通过主构造方法进行而必须使用其他公有的辅助构造方法或工厂方法(专门用于构造对象的方法)。例如    scala class Students private (n: String, m: Int) {             |    val name n             |    val score m             |    def this(n: String) this(n, 100)             |    println(n s score is m)             |  }    defined class Students    scala val stu new Students(Bill, 90) //与私有的主构造方法匹配访问错误    :12: error: too many arguments (2) for constructor Students: (n: String)Students           val stu new Students(Bill, 90)    scala val stu new Students(Bill) //与辅助构造方法匹配    Bills score is 100    stu: Students Students7509b8e7方法重载如果在类里定义了多个同名的方法但是每个方法的参数(主要是参数类型)不一样那么就称这个方法有多个不同的版本即方法重载它是面向对象里多态属性的一种表现。这些方法虽然同名但是它们是不同的因为函数真正的特征标识是它的参数而不是函数名或返回类型。注意重载与前面的重写的区别重载是一个类里有多个不同版本的同名方法重写是子类覆盖已定义在超类(即父类)的某个方法。类参数从前面的例子可以发现多数时候类的列表参数仅仅是直接赋给某个字段。Scala为了进一步简化代码允许在类参数前加上val或var来修饰这样就会在类的内部生成一个与参数同名的公有字段(此字段也是类的成员)。构造对象时这些参数会直接复制给同名字段。除此之外还可以加上关键字private、protected或override来表明字段的权限(关于权限修饰见后续章节)。如果参数没有任何val或var关键字那它就仅仅是“参数”不是类的成员只能用来初始化字段或给方法使用,外部不能访问这样的参数内部也不能修改它,因为它不是类的成员。例如scala class ab(a:Int){ //a不是类的成员仅仅是个传递参数     | val ba1     | }defined class abscala val cnew ab(8)c: ab ab6e2d3f2scala c.bres0: Int 9scala c.a         ^       error: value a is not a member of ab以下在类参数定义时加上val则类参数同时变成了类成员:scala class ab(val a:Int){     | val ba1     | }defined class abscala val cnew ab(8)c: ab abccd000escala c.bres2: Int 9scala c.ares3: Int 8单例对象与伴生对象在Scala里除了用new可以构造一个对象也可以用“object”开头定义一个对象。它类似于类的定义只不过不能像类那样有参数也没有构造方法。因此不能用new来实例化一个object的定义因为它已经是一个对象了对比class用new可以实例化无数个对象而object只能定义一个对象因此也把object定义的对象叫单列对象如果对于单列对象object A 存在伴生类class A则又把object A叫Class A的伴生对象它们可以相互访问私有成员。概念虽多但是意思很明确工厂对象与工厂方法如果定义一个方法专门用来构造某一个类的对象那么这种方法就称为“工厂方法”。包含这些工厂方法集合的单例对象也就叫“工厂对象” 。通常工厂方法会定义在伴生对象里。尤其是当一系列类存在继承关系时可以在基类的伴生对象里定义一系列对应的工厂方法。使用工厂方法的好处是可以不用直接使用new来实例化对象改用方法调用而且方法名可以是任意的这样对外隐藏了类的实现细节。例如    class Students(val name: String, var score: Int) {      def exam(s: Int) score s      override def toString name s score is score .      // 重写超类方法toString,注意关键字override     }    object Students {   def registerStu(name: String, score: Int) new Students(name, score)    }将文件students.scala编译后并在解释器里用“import Students._”导入单例对象后就能这样使用    scala import Students._    import Students._    scala val stu registerStu(Tim, 100)    stu: Students Tims score is 100.apply方法类和伴生对象有一个特殊的方法名:apply如果定义了这个方法那么既可以显式调用“对象.apply(参数)” 也可以隐式调用“对象(参数)”。隐式调用时编译器会自动插入缺失的“.apply”。如果apply是无参方法应该写出空括号(这和普通方法不同)否则无法隐式调用。无论是类还是单例对象都能定义这样的apply方法。通常在伴生对象里定义名为apply的工厂方法就能通过“伴生对象名(参数)”来构造一个对象。也常常在类里定义一个与类相关的、具有特定行为的apply方法让使用者可以隐式调用进而隐藏相应的实现细节。例如class Students(val name: String, var score: Int) {      def apply(s: Int) score s      def display() println(Current score is score .)      override def toString name s score is score .    }    object Students {      def apply(name: String, score: Int) new Students(name, score)    }    scala val stu  Students(laozhang, 59)     stu: Students  laozhangs score is 59. //注意没有使用new Students(laozhang, 59),这是传统构造方法    scala stu(60)    scala stu.display    Current score is 60.其中“Students(laozhang, 59)”被翻译成“Students.apply(laozhang, 59)”也就是调用了伴生对象里的工厂方法所以构造了一个Students的对象并赋给变量stu。“stu(60)”被翻译成“stu.apply(60)” 也就是更新了字段score的数据。主函数主函数是Scala程序唯一的入口即程序是从主函数开始运行的。要提供这样的入口则必须在某个单例对象里定义一个名为“main”的函数而且该函数只有一个参数类型为字符串数组Array[String]函数的返回类型是Unit(即空类型,注意不是UInt类型哈)。任何符合条件的单例对象都能成为程序的入口。例如//在students.scala文件中定义    class Students(val name: String, var score: Int) {      def apply(s: Int) score s      def display() println(Current score is score .)      override def toString name s score is score .    }    object Students {      def apply(name: String, score: Int) new Students(name, score)    }//在 main.scala文件中定义    object Start {      def main(args: Array[String]) {        try {          val score args(1).toInt          val s Students(args(0), score)          println(s.toString)        } catch {          .....        } } }使用命令“scalac students.scala main.scala”将两个文件编译后就能用命令“scala Start 参数1 参数2”来运行程序。命令里的“Start”就是包含主函数main的单例对象的名字后面可以输入若干个用空格间隔的参数。这些参数被打包成字符串数组供主函数使用也就是代码里的args(0)、args(1)。主函数的另外一种写法是让单例对象继承“App”特质(特质的概念引入是因为scala不支持多重超类的继承为实现多重超类继承的某些特性而引入了特质概念)这样就只需在单例对象里编写主函数的函数体无需显式定义main方法。例如    object Start extends App {      try {        var sum 0        for(arg           sum arg.toInt        }        println(sum sum)      } catch {        ......      }    }  将文件编译后使用方法同前关于class的知识做为硬件设计语言chisel3/spinalHDL,这些已经够用了。照例结合spinalHDL给个小提示以下视频简单演示伯克利分校的教学用riscv32处理器其使用基于scala宿主语言的chisel3硬件设计语言编写更多信息请长期关注微信公众号RiscV与IC设计

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/bicheng/86481.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

企业网站建设 制作做局域网网站教程

文章目录 前言一、创建hdfs-demo项目1. 在idea上创建maven项目2. 导入hadoop相关依赖 二、常用 HDFS Java API1. 简介2. 获取文件系统实例3. 创建目录4. 创建文件4.1 创建文件并写入数据4.2 创建新空白文件 5. 查看文件内容6. 查看目录下的文件或目录信息6.1 查看指定目录下的文…

官方网站建设的目的阿里云域名查询系统

新建一个文件夹,再在新建的文件夹里写html文件,再用快捷键:altb打开即可。

网站群建设 效果网页界面模板设计

界面很简单,虽然是英文,但基本也能看懂,参数调一调,随机生成不重复的8K高清图片。 这种图片可能对普通人感觉很奇怪,有什么用呢?会C4D建模渲染的同学应该会明白,特别是建一些科技类的场景背景&a…

免费wap自助建站系统网站建设语言

该楼层疑似违规已被系统折叠 隐藏此楼查看此楼题目要求是你输入a->b->c->d,然后存在内存里,然后改变在内存里的存储,改成存d->c->b->a,然后输出还是abcd,能不能就是用一个数组也存一份输入的&#x…

国外做图标网站qq电脑版网页登录入口

解决Java调用Python代码返回中文乱码问题 一、乱码原因分析 在Java调用Python代码执行时遇到乱码,我们的第一反应可能是检查文件编码设置是否一致。但在本例中,无论是Java还是Python,编码格式均已设为“UTF-8”,因此排除了编码不…

厦门网站建设方案维护网站开发技术服务合同

[css] 如果css文件过大时,如何异步加载它? 分割成多个CSS文件进行Gzip压缩link preload个人简介 我是歌谣,欢迎和大家一起交流前后端知识。放弃很容易, 但坚持一定很酷。欢迎大家一起讨论 主目录 与歌谣一起通关前端面试题

织梦网站图片怎么修改不了cms网站下载

理论部分: 编写思路: GPIO 的地位跟其他模块,比如 I2C 、 UART 的地方是一样的,要使用某个引脚,需要先把引脚配置为 GPIO 功能,这要使用 Pinctrl 子系统,只需要在设备 树里指定就可以。在…

php模板网站企业网站经典案例

习惯性刷CSDN,发现了这么个主题,有意思。在我的字典里,“养生”这个条目已经被我删了。看过了太多的伪科学、贩卖焦虑、带货、自以为是,干脆眼不见为净。但程序员人均亚健康这句话真未必是个玩笑,所以还是凑个热闹聊上…

网站服务器速度对seo有什么影响闵行网站建设公司

很高兴在雪易的CSDN遇见你 VTK技术爱好者 QQ:870202403 前言 本文分享VTK样例GreedyTerrainDecimation,并解析接口vtkGreedyTerrainDecimation,希望对各位小伙伴有所帮助! 感谢各位小伙伴的点赞+关注,小易会继续努力分享,一起进步! 你的点赞就是我的动力(^U^)ノ…

网站备案名称的影响wordpress 删除边栏

事实上,红帽认证含金量在全球范围内都得到了广泛的认可和重视。许多企业和组织都将红帽认证作为招聘和选拔人才的重要标准之一。持有红帽认证的个人往往能够获得更好的职业机会和更高的薪资水平。此外,红帽认证还被许多政府机构、行业协会和教育机构所认…

制作网站制作网站建设的网站制作课程介绍

键盘和鼠标是与计算机交互的重要外围设备。有些人可能会争辩说,你只需要这些设备中的一个,但事实上,只使用其中一个设备的电脑可能非常困难。但是,如果你的鼠标或笔记本电脑的触控板突然停止工作,而你无法修复它或无法使用备用鼠标,该怎么办? 在这种情况下,你可以使用…

网站注册短信验证怎么做WordPress主题后门检测

优质回答 回答者:temps1991Java里try catch的简单用法:1、trycatch程序的流程是:运行到try块中,如果有异常抛出,则转到catch块去处理。然后执行catch块后面的语句扩展部分:1、trycatchfinally程序的流程是&…

网站建设的总体设计建网站哪家好行业现状

随着5G技术的快速发展,毫米波通信作为其中的一项重要技术,在高速数据传输、低延迟通信和大规模连接等方面具有显著的优势。本文将探讨5G毫米波通信中的关键技术,包括毫米波频段的选择、信号处理技术和MIMO技术等。 一、毫米波频段的选择 毫米…

域名备案企业网站内容wordpress页面表格

产品说明书常常被低估,但其实它是一个企业的名片,在阐述你的产品服务时大有作用。如果你在制作产品说明书上面花费大量的时间和精力,那么今天的文章可能会对你有所帮助。此文将会引领你了解如何制作产品说明书,以及推荐几款高效的…

厦门中小企业建网站补助手机建站哪家好

不容易系列之(3)—— LELE的RPG难题 Problem Description 人称“AC女之杀手”的超级偶像LELE最近忽然玩起了深沉,这可急坏了众多“Cole”(LELE的粉丝,即"可乐"),经过多方打探,某资深Cole终于知道了原因,原来…

服务器主机搭建网站最准确的汽车报价网

java jdk1.5提供线程池 在java.util.concurrent包下提供工厂类Executors用于生产线程池,Executors提供了4种线程池 newFixedThreadPool: 创建一个线程池,该线程池重用固定数量的从共享无界队列中运行的线程。 newScheduledThreadPool&#x…

mvc做网站用的多不多wordpress 中文插件

Hello,小索奇!很高兴为你拓展关于GPT-3、GPT-4、ChatGPT之间关系的信息,以及解释自然语言模型和Transformer的区别。 首先,GPT-3、GPT-4、ChatGPT都是建立在GPT系列技术基础上的自然语言处理模型。它们在不同的代数、性能和应用场…

圣亚科技网站案例动漫制作公司排名

😎 作者介绍:我是程序员洲洲,一个热爱写作的非著名程序员。CSDN全栈优质领域创作者、华为云博客社区云享专家、阿里云博客社区专家博主、前后端开发、人工智能研究生。公众号:洲与AI。 🎈 本文专栏:本文收录…

北京中天人建设工程有限公司网站凡科建站登录入口官方正版

天行健,君子以自强不息;地势坤,君子以厚德载物。 每个人都有惰性,但不断学习是好好生活的根本,共勉! 文章均为学习整理笔记,分享记录为主,如有错误请指正,共同学习进步。…

做网站效果图是用ps还是ai成都网站建设哪家便宜

一、本文介绍 本文给大家带来的改进机制是实现级联群体注意力机制CascadedGroupAttention,其主要思想为增强输入到注意力头的特征的多样性。与以前的自注意力不同,它为每个头提供不同的输入分割,并跨头级联输出特征。这种方法不仅减少了多头注意力中的计算冗余,而且通过增…