0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

Chisel(三) Scala语法 类与对象

学FPGA,慢慢来 2019-08-19 23:29 次阅读

在Scala中,类是使用关键字“class”开头的代码定义的,定义完成类之后,就可以“new类名”的方式来构造一个对象,而这个对象的类型就是类。在类之中,可以定义val或var类型的变量,也可以定义“def”函数,这些都统称方法。字段和方法统称“成员”。字段通常运用于保存对象的状态与数据,而方法则用于承担对象的计算任务。

在外部想要访问成员时,可以使用“对象.成员”的形式来访问,“val”类型的变量只能与初始化时的对象绑定。Scala的类成员默认都是共有的,都可以使用“对象.成员”的方式来访问。

在Scala中不需要显式定义构造方法,而是把类内部非字段、非方法的代码都当做“主构造方法”,而且,类名后面可以定义若干个参数列表,用于接收参数,这些参数将在构造对象时用于初始化字段并传递给主构造方法使用。除了主构造方法,还可以定义若干个辅助构造方法。辅助构造方法都是以“defthis(...)”来开头的,而且第一步行为必须是调用该类的另一个构造方法,即第一句语句必须是“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 = Students@74309cd5

在这个例子中,定义了一个辅助构造方法,该方法是无参的,其行为也仅是给主构造方法传递一个字符串“None”。在后面创建对象时,缺省了参数,这样与主构造方法的参数列表是不匹配的,但是与辅助构造方法匹配,所以stu指向的对象是用辅助构造方法构造的。

Java里,辅助构造方法可以调用超类的构造方法,而Scala加强了限制,只允许主构造方法调用超类的构造方法(详情见后续章节)。这种限制源于Scala为了代码简洁性与简单性做出的折衷处理。

————————————————

版权声明:本文为CSDN博主「_iChthyosaur」的原创文章,遵循CC 4.0 by-sa版权协议,转载请附上原文出处链接及本声明。

原文链接:https://blog.csdn.net/qq_34291505/article/details/86760620

如果在类名与类的参数列表之间加上关键字“private”,那么主构造方法就是私有的,只能被内部定义访问,外部代码构造对象时就不能通过主构造方法进行。

主函数是Scala程序的唯一入口,即程序是由主函数开始运行的,要提供这样的入口,则必须在某个单例对象里定义一个名为“main”的函数,而且这个函数只有一个参数,类型是字符串数组Array[String],函数的返回类型是Unit。任何符合条件的单例对象都能成为程序的入口。



声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • scala
    +关注

    关注

    0

    文章

    42

    浏览量

    6402
  • Chisel
    +关注

    关注

    0

    文章

    7

    浏览量

    449
收藏 人收藏

    评论

    相关推荐

    java子类可以继承父的什么

    Java是一种面向对象的编程语言,它支持继承的概念。继承是面向对象编程的大特性之一,它允许一个(称为子类或派生)继承另一个
    的头像 发表于 08-20 11:02 713次阅读

    HarmonyOS Next原生应用开发-从TS到ArkTS的适配规则(十五)

    } 、不支持with语句 规则:arkts-no-with 级别:错误 ArkTS不支持with语句,使用其他语法来表示相同的语义。TypeScript with (Math) { // 编译
    发表于 08-19 16:13

    FPGA学习笔记---基本语法

    Verilog语法是指硬件能够实现的语法。它的子集很小。常用的RTL语法结构如下: 1、模块声明:module ... end module 2、端口声明:input, output, inout
    发表于 06-23 14:58

    鸿蒙语言TypeScript学习第16天:【

    TypeScript 支持面向对象的所有特性,比如 、接口等。
    的头像 发表于 04-15 09:29 930次阅读
    鸿蒙语言TypeScript学习第16天:【<b class='flag-5'>类</b>】

    #2024,立Flag了嘛? #学习spinal HDL还需要学习对应的Scala语言

    学习spinal HDL还需要学习对应的Scala语言,但是spinal HDL直接贴近硬件编程,不知道对于学习spinal HDL有什么好的建议?
    发表于 01-21 11:11

    #2024,立Flag了嘛? # 开年之疑问重重

    选择SpinalHDL、chisel还是verilog HDL作为开发语言,上周FPGA大佬跟几个在IC设计公司的同学吃饭后,聊了一下发现对应的行业标杆的公司导入了spinalHDL作为开发语言
    发表于 01-13 09:18

    vb运行时错误429不能创建对象

    系统中已经安装了对象所依赖的组件或库。如果缺少这些组件或库,就会导致不能创建对象的错误。解决这个问题的方法是安装所需的组件或库。 对象或程序集不存在:如果要创建的
    的头像 发表于 01-09 11:07 2048次阅读

    稳压电源一三类区别

    稳压电源一、二三类是指按照供电设备的直流输出偏差范围和抗干扰能力对稳压电源进行分类的方法。下面将详细介绍稳压电源一、二
    的头像 发表于 12-28 17:54 8205次阅读

    基于C/C++面向对象的方式封装socket通信流程简析

    在掌握了基于 TCP 的套接字通信流程之后,为了方便使用,提高编码效率,可以对通信操作进行封装,本着有浅入深的原则,先基于 C 语言进行面向过程的函数封装,然后再基于 C++ 进行面向对象封装。
    的头像 发表于 12-26 10:00 1663次阅读

    基于C/C++面向对象的方式封装socket通信

    在掌握了基于 TCP 的套接字通信流程之后,为了方便使用,提高编码效率,可以对通信操作进行封装,本着有浅入深的原则,先基于 C 语言进行面向过程的函数封装,然后再基于 C++ 进行面向对象封装。
    的头像 发表于 12-26 09:57 1256次阅读

    oracle和mysql语法区别大吗

    Oracle和MySQL是两种不同的关系型数据库管理系统(RDBMS)。虽然它们都是遵循SQL标准,但在语法和特性上仍存在一些区别。以下是对Oracle和MySQL语法区别的详细说明: 数据类型
    的头像 发表于 12-06 10:26 1061次阅读

    oracle的update语法

    Oracle是一种强大的关系型数据库管理系统,具有广泛的应用,UPDATE语句是用于修改数据库中现有记录的重要操作之一。在本文中,我们将详细介绍Oracle的UPDATE语法及其用法。 首先,我们
    的头像 发表于 12-05 16:22 2213次阅读

    this可以出现在方法中吗

    是的, this 关键字可以出现在方法中。在Java中, this 是一个引用,用于引用当前对象的实例。它可以在的实例方法中使用,以访问该实例的成员变量和方法。 当在方法中使
    的头像 发表于 11-28 16:24 1262次阅读

    java接口是特殊的抽象

    的区别。 首先,从语法和定义上来看,接口和抽象是不同的。接口是用interface关键字定义的,而抽象是用abstract关键字定义的。根据Java语法,一个
    的头像 发表于 11-21 10:07 576次阅读

    select语句的基本语法

    、详实、细致地解释SELECT语句的基本语法以及关键部分。 SELECT语句的基本语法如下: SELECT 列名 1 , 列名 2 , ... FROM 表名 WHERE 条件 上述语法可以分为
    的头像 发表于 11-17 16:23 1770次阅读