Scala的trait和extend代码运用实战Demo例子

基于PDF文档结构的数字隐写 PDF隐写 阅读详情

1、概述

在这里插入图片描述

在Scala中,trait是一种特殊的概念,它类似于Java中的接口。trait可以定义方法和字段,但是不能实例化。类可以扩展trait,从而获得trait中定义的方法和字段。

在Scala中,extend关键字用于扩展类或特质。当一个类扩展另一个类时,它继承了父类的所有字段和方法。当一个类扩展一个特质时,它必须实现特质中定义的所有抽象方法。

2、实战代码

trait ScoreQuery {
  def queryScore(subject: String): Option[Double]
}

class A extends ScoreQuery {
  override def queryScore(subject: String): Option[Double] = subject match {
    case "语文" => Some(80)
    case "数学" => Some(90)
    case "英语" => Some(85)
    case _ => None
  }
}

class B extends ScoreQuery {
  override def queryScore(subject: String): Option[Double] = subject match {
    case "美术" => Some(95)
    case "体育" => Some(87)
    case "音乐" => Some(92)
    case _ => None
  }
}

class C extends ScoreQuery {
  private val a = new A()
  private val b = new B()

  override def queryScore(subject: String): Option[Double] =
    a.queryScore(subject).orElse(b.queryScore(subject)) match {
      case s: Some[Double] => s
      case None => subject match {
        case "物理" => Some(88)
        case "化学" => Some(93)
        case "生物" => Some(89)
        case _ => None
      }
    }
}

class D extends C {
  private val a = new A()
  private val b = new B()

  override def queryScore(subject: String): Option[Double] =
    super.queryScore(subject).orElse(a.queryScore(subject)).orElse(b.queryScore(subject)) match {
      case s: Some[Double] => s
      case None =>
        subject match {
          case "政治" => Some(74)
          case "历史" => Some(81)
          case _ => None
        }
    }
}

object BindTest {

  def main(args: Array[String]): Unit = {
    val a = new A()
    val b = new B()
    val c = new C()
    val d = new D()

    println(a.queryScore("语文"))
    println(b.queryScore("体育"))
    println(c.queryScore("化学"))
    println(d.queryScore("政治"))
    println("*" * 100)
    println(c.queryScore("语文"))
    println(c.queryScore("体育"))
    println(d.queryScore("语文"))
    println(d.queryScore("体育"))

  }

}

3、控制台输出

Some(80.0)
Some(87.0)
Some(93.0)
Some(74.0)
****************************************************************************************************
Some(80.0)
Some(87.0)
Some(80.0)
Some(87.0)
128、点云配准与ICP:经典配准算法与深度学习配准 上周调试一台双臂协作机器人,左手持结构光相机扫描桌面上的随机堆叠工件,右手准备执行抓取。问题出在“对齐”这一步——相机扫描得到的点云和CAD模型点云之间差了大约15度的旋转,导致抓取姿态计算出来直接怼到桌面上。我第一反应是“ICP跑一下不就行了”,结果跑了三分钟,误差纹丝不动,甚至越迭代越发散。后来查了日志才发现,初始位姿给得太离谱,ICP直接掉进了局部最优。这个场景太典型了——很多人以为点云配准就是调个ICP库函数,实际工程里坑比想象中多得多。今天这篇笔记,咱们把点云配准这件事从头捋一遍。 阅读详情

相关推荐

从7V到28V宽压输入,手把手教你设计一个5V/3A的DCDC电源模块(附MPS1584选型与原理图避坑)

本文详细解析了基于MPS1584芯片的7V至28V宽压输入到5V/3A输出的DCDC电源模块设计全流程。从电源架构选择、原理图设计要点到实际调试经验,涵盖了输入保护电路、功率转换核心电路及系统级优化测试,帮助工程师规避常见设计陷阱,实现高效稳定的电源解决方案。

weixin_33712987的博客 499

Scala语言的箭头函数

scala这里的parameters是输入参数,可以是一个或多个参数,=>符号后面的expression是函数体,可以是一个简单的表达式或一个代码块。

2501_91366345的博客 386

高等数学第五章---定积分(§5.3定积分的计算方法)

这篇博客详细讲解定积分的计算方法,包括直接法、凑微分法、变量代换法和分部积分法。通过典型例题演示如何运用这些技巧计算定积分,特别强调换元必换限的原则和奇偶函数的简化处理。内容涵盖代数变形、三角代换、分段函数积分等常见题型,并附有详细的解题步骤和常见错误分析。适合微积分学习者系统掌握定积分计算技巧,提升解题效率。文中还包含积分等式证明和变限积分函数求导等进阶内容,帮助读者深入理解定积分的应用。

2302_77045867的博客 4330

scala的继承、组合与特质trait

scala可以在子类的构造器中重写父类的属性,例如: abstract class Element { def contents:Array[ String] val height:Int = contents. length val width:Int = if(height ==0) 0 else contents( 0). length } 子类:

拱头的专栏 6417

ResNet改进(20):融合Swin Transformer与ResNet

这种混合架构的设计理念是:在保留CNN强大局部特征提取能力的同时,引入Transformer的全局建模优势。我们实现的模型在ResNet18的基础上嵌入了一个简化版的Swin Transformer Block,旨在探索两种范式结合的可能性。通过在ResNet早期阶段引入Transformer模块,我们既保留了CNN强大的局部特征提取能力,又获得了Transformer的全局建模优势。本文提出的ResNet与Swin Transformer混合架构,探索了CNN与Transformer结合的可能性。

2401_82355416的博客 858

【系统分析师】第2章-基础知识:数学与工程基础(核心总结)

数学与工程基础

数据知道的博客 6812

trait的用法 解决多继承问题(不过它并不是继承,一定要清楚明白)

首先重要的事情说三遍:    trait不是继承,和extends不一样。    trait不是继承,和extends不一样。    trait不是继承,和extends不一样。请记住这个大前提,要不然在接下来的讲解中,你会很苦恼。会不断的问自己为什么,为什么!1.用法      先上个实例:<?php trait trait1 { public function ceshi(){ ...

晓丶峰 4264

5G射频设计中N77&N79的PRX为什么需要3个SRS

首先,我们来逐个拆解一下这个神秘的“

weixin_43199439的博客 1323

PHP的Trait和extends

前言:总结一下PHP类的关键字,extends,trait,abstract,interface,implements。 《-------------------华丽的分隔线-----------------------------------------》 extends:单继承用法; trait:解决多继承问题;     不可以实例化;     优先顺序是来自当前类的成员覆盖了 ...

WGQTHXXXXM的博客 1067

SolidWorks2020详细步骤安装教程

1、在安装软件前请断开网络连接,需要安装.NETFramework3.5和4.0,最后还要确保把之前安装的旧版本完全卸载,以管理员身份运行SolidWorks_Flexnet_Server\server_remove.bat,然后等到服务“SolidWorksFlexnet服务器”将被删除。12、先不要运行软件,找到_SolidSQUAD_文件夹,将文件夹“ProgramFiles\SOLIDWORKSCorp”中的所有破解文件复制替到“ProgramFiles\SOLIDWORKSCorp”目录下;

qq_53545309的博客 1万+

【OpenClaw企业级智能体实战】第10篇:医疗行业OpenClaw实战:病历自动书写、医保智能审核与患者随访管理(附HIPAA合规配置+完整代码)

医疗行业正面临“效率提升需求”与“合规监管红线”的双重矛盾:病历书写占据医生30%-50%工作时间,医保审核效率低下,患者随访工作量巨大,但医疗数据“不出域”“责任不转移”的要求又限制了AI落地。本文基于华为云、腾讯云安全规范及中关村科金、复旦大学附属中山医院等真实实践,拆解OpenClaw在医疗场景的五大核心应用(病历自动书写、医保智能审核、患者随访管理、科研文献综述、医学影像预处理),提供私有化部署架构、HIPAA合规配置模板、完整实操流程及可直接运行的代码。

专注于人工智能、软件开发、工控自动化、工厂数字化及智能化等领域,希望和大家共同进步! 438

Trait

自 PHP 5.4.0 起,PHP 实现了一种代码复用的方法,称为 trait。 Trait 是为类似 PHP 的单继承语言而准备的一种代码复用机制。Trait 为了减少单继承语言的限制,使开发人员能够自由地在不同层次结构内独立的类中复用 method。Trait 和 Class 组合的语义定义了一种减少复杂性的方式,避免传统多继承和 Mixin 类相关典型问题。 Trait

luyaran的博客 855

实验三、数字PID控制器的设计

由图可知,由于微分环节的作用,在曲线的起始上升段出现了一个尖锐的波峰,之后曲线也呈衰减的振荡:随着Td增加,系统的超调量增大,但曲线尖锐的起始上升阶段后响应速度减慢,可以看出Td越小。对大多数算法,缩短采样周期可使控制回路性能改善,但采样周期缩短时,频繁的采样必然会占用较多的计算工作时间,同时也会增加计算机的计算负担,而对有些变化缓慢的受控对象无需很高的采样频率即可满意地进行跟踪,过多的采样反而没有多少实际意义。随着Kp的增加,闭环系统的超调量增加,响应速度加快,控制时间加长,稳态误差减少;

m0_51738372的博客 8022

scala中的接口——trait

scala中的接口 没有接口,采用trait(特征)来代替接口的概念,类似于java中的 interface+abstract class, scala中称为类 混入/继承 了特质 特质 trait – 可以类比java中的接口,但是又和接口非常不一样 定义特质 trait xxx{ def m1() def m2(){....} } 和java中的接口不同 scala中的特质可...

weixin_39198774的博客 573

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

scala入门-07特质类(trait)的使用

trait类似于Java8中的可用带default method的接口。 trait中可以带有实现的方法,也可以带有抽象方法,使用trait的方法是with而混入类中。   我们在scala下的org.scala.clazz下创建一个类MyTrait.scala 定义一个特质类 Logger 定义MyLogger类 实现特质类Logger 调用: PS:我们这里使...

stark_summer 180

霍尼韦尔SoftMaster使用说明

霍尼韦尔SoftMaster使用说明

scala特质反编译java代码简单分析

**scala特质java反编译代码简单分析** 最近学习了scala特质的简单章节配合着视频进行了反编译分析。 1当trait只有抽象方法,没有非抽象方法时 package day07 object demo4 { def main(args: Array[String]): Unit = { val person = new Student() person.say() person.run() } } trait Person{ def say()...

wuyuaigaili的博客 746

STM32F407中文手册

STM32f407中文手册 本参考手册面向应用开发人员,提供有关使用 STM32F405xx/07xx、STM32F415xx/17xx、 STM32F42xxx 和 STM32F43xxx 微控制器存储器与外设的完整信息。STM32F405xx/07xx、STM32F415xx/17xx、STM32F42xxx 和 STM32F43xxx 构成一个微 控制器系列,各产品具有不同的存储器大小、封装和外设。有关订购信息以及器件的机械与电气特性,请参见数据手册。有关 ARM Cortex™-M4F 内核的信息,请参见《Cortex™-M4F 技术参考手册》。

spark笔记之类、对象、继承、特质

Scala的类与Java、C++的类比起来更简洁,学完之后你会更爱Scala!!!1.1. 类1.1.1. 类的定义 package cn.itcast.class_demo /** * 在Scala中,类并不用声明为public类型的。 * Scala源文件中可以包含多个类,所有这些类都具有共有可见性。 */ class Person { //用val修饰的变量是可读属性,有getter但...

weixin_34362875的博客 353

php代码复用 trait 的一些要点

php不能多继承,只能多层继承,但是php5.4版本后为了解耦,也提供了另一种代码复用方法trait。 trait的一些关键点需要注意 1,trait怎么使用 trait的使用方法就是用trait构建一个类 trait firstClass { function test(){ echo 'first'; } } class sonClass extends fatherClass { use firstClass; } $obj = new sonCl

梦启未来 335

深入理解Scala默认参数函数:从方法重载到优雅API设计

我写这篇文章的时候,特意没罗列默认参数有多少种用法——因为用法很简单,谁都能写。默认参数为什么重要?可选参数。Java里你想要可选参数?写重载方法。想要几个?写一堆。代码臃肿,维护痛苦。Scala的默认参数把这件事简化了——一行函数签名,编译器帮你生成所有的重载方法。调用方想用默认值就用默认值,想改哪个就改哪个,不用管顺序。把重复的事情交给编译器,让程序员专注在业务逻辑上。你不用手写重载方法——编译器帮你写。你不用记参数顺序——命名参数帮你记。你不用写Builder类——默认参数就是Builder。

https://starzy1990.github.io/ 732

大数据Spark(八十二):Spark 算子综合案例

本文通过四个典型Spark算子应用案例,系统讲解了单词频次过滤、PV/UV统计、二次排序及分组取TopN的实现方法。涵盖flatMap、mapToPair、reduceByKey、distinct、sortByKey、groupByKey等核心算子的组合使用,提供Java与Scala双语言实现,兼顾可读性与实用性。强调根据数据规模选择合适方案,避免内存溢出,适用于大数据处理场景的实战参考。

Lansonli(蓝深李)的博客 612

深入理解Scala可变参数函数:从Java数组语法到优雅集合传递

我写这篇文章的时候,特意没罗列可变参数有多少种用法——因为用法很简单,谁都能写。Scala的可变参数为什么比Java好用?不是因为它有:_*这个语法——而是因为它的底层是Seq,不是数组。Java的可变参数是数组的语法糖——你传List进去,它不认,因为List不是数组。你想传?自己转。Scala的可变参数是Seq的语法糖——你传任何序列进去,只要用:_*展开就行。不用转,不用强转,一行代码搞定。**这就是函数式语言的设计哲学:可变参数不是"数组的便捷写法",它是"序列的便捷写法"。

https://starzy1990.github.io/ 435

深入理解Scala递归函数:从栈溢出到尾调用优化

我写这篇文章的时候,特意没罗列递归有多少种写法——因为递归的语法很简单,谁都能写。为什么Java的递归会栈溢出,而Scala的不会?不是因为Scala更厉害——而是因为Scala是函数式语言,递归是它的核心特性之一。它从设计之初就考虑了尾调用优化的问题。Java是命令式语言,它的核心是对象和方法,递归只是一个"能用但不推荐"的特性。Java程序员写递归:栈溢出,不敢用Scala程序员写递归:尾递归,随便写递归不是洪水猛兽,栈溢出是因为你没写对。你可以用递归的优雅写法,获得循环的性能。

https://starzy1990.github.io/ 610

深入理解Scala Map:从实现原理到工程实践

我写这篇文章的时候,特意没罗列Map有多少个方法——因为那些东西官方文档都有,查一下就行。Map到底解决了什么问题?它不是"带key的列表",它是一个"从key到value的映射函数"。它用哈希表的O(1)查找,换来了通过key快速找到value的能力。在大数据开发里,Map无处不在——维度关联、配置映射、计数统计、分组聚合、缓存索引。理解了Map,你就理解了大数据处理里最核心的几个操作:查找、映射、聚合。很多人用了几年Map,还停留在"new一个HashMap,然后put put put"的阶段。

https://starzy1990.github.io/ 382

深入理解Scala可变Map:动态构建场景下的性能与设计权衡

我写这篇文章的时候,特意没罗列可变Map有多少个方法——因为那些东西官方文档都有,查一下就行。为什么需要可变Map?不是因为"它就是Java HashMap的Scala版",而是因为在动态构建数据的场景下,不可变Map的性能不够好。你要在循环里不断往Map里加key-value对,用不可变Map就是O(n²)的灾难,用可变Map就是O(n)的高效。但可变Map也不是万能的。它只适合"构建"场景——你在一个方法内部,动态构建一个Map,最后输出一个不可变Map。

https://starzy1990.github.io/ 354

Scala String操作:从插值器到正则的完整指南

/ 自定义日期插值器????// 实际开发中更常用的是内置插值器// s、f、raw已经覆盖99%的场景Scala的字符串操作,表面上是给Java String"加了语法糖",本质上是把字符串从"一个不可变的字符序列"提升为"一个可以函数式操作的集合"。更简洁的拼接:插值器替代了Java的拼接和,代码更易读更强大的操作:map/filter/flatMap让字符串处理像集合操作一样组合更安全的比较==就是值比较,消除了Java中==和equals的混淆。

https://starzy1990.github.io/ 634

Scala List操作:不可变链表的函数式美学

Scala的List,表面上是Java List的"Scala版",本质上是函数式编程的核心数据结构——不可变的链表,配合模式匹配和递归,构成了声明式数据处理的基础。天然线程安全:不可变对象不需要锁,在多线程环境下可以安全共享结构共享:操作List时可以复用大部分结构,性能更好函数式友好:map/filter/reduce不修改原List,可以组合、可以嵌套这些特性不是孤立的,它们共同支撑了Scala的函数式编程范式。

https://starzy1990.github.io/ 1331
上一篇: 大数据处理框架-Spark DataFrame构造、join和null空值填充
下一篇: 大数据-Spark批处理实用广播Broadcast构建一个全局缓存Cache
数智客栈
博客等级 码龄17年 5699粉丝 89原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值