Scala之旅(TOUR OF SCALA)——复合类型(COMPOUND TYPES)

【AI方案集】个人记忆库型AI智能体终身伴侣方案.docx 这套AI技术方案不走“先堆概念再硬套场景”的老路,而是以业务痛点为锚点,把机器视觉识别、预测性分析、大模型知识赋能等能力拆解成轻量化可落地的功能模块,直接嵌入生产运营的关键环节,既能快速落地见效,又能通过持续的数据迭代逐步放大价值,帮企业在不盲目新增硬件投入的前提下,稳步完成智能化升级,实实在在把AI变成能降本、提效、控风险的生产工具。 立即下载

有时要表达对象的类型是其它几种类型的子类型。在 Scala 中使用复合类型来表达,它是对象类型的交集。

trait Cloneable extends java.lang.Cloneable {
    override def clone(): Cloneable = {
        super.clone().asInstanceOf[Cloneable]
    }
}
trait Resetable {
    def reset: Unit
}

现在假设我们想写一个函数 cloneAndReset 有一个参数,将参数克隆出一个新对象并且将原参数重置最后返回新克隆出的对象:

def cloneAndReset(obj: ?): Cloneable = {
    val cloned = obj.clone()
    obj.reset
    cloned
}

问题变成了参数 obj 的类型是什么。如果它实现了 Cloneable ,参数对象可以被克隆,但是不能重置;如果它实现了 Resetable ,参数对象可以被重置,但是没有克隆操作。为了避免在这种情况下的类型转换,我们可以指定 obj 的类型实现 Cloneable 和 Resetable 两个特征。在 Scala 中复合类型形如:Cloneable with Resetable 。

这里有更新之后的函数例子:

def cloneAndReset(obj: Cloneable with Resetable): Cloneable = {
    //...
}

复合类型是由几种对象类型组成。它们有一个使用了已经存在的结构简单的对象成员的简单的实现。一般的形式是:A with B with C ... { refinement } 。

【能源系统优化】基于MATLAB的光储充一体化多目标调度:光伏自用率与充电成本权衡及储能联合调控 MATLAB 光储充一体化运行优化|光伏自用率与充电成本权衡 内容概要:本文围绕MATLAB实现的光储充一体化系统运行优化展开,旨在通过建立统一的能量调度模型,量化光伏自用率与充电成本之间的权衡关系,提升设备利用效率与运行安全性,并形成可复现的工程分析能力。项目采用多目标混合整数线性规划方法,综合考虑分时电价、储能损耗、光伏消纳与车辆充电需求,在满足功率平衡、储能状态递推、充放电互斥等约束条件下,实现经济性与环保性的协同优化。通过归一化加权目标函数,支持灵活调整运营策略偏好,并利用MATLAB R2025b完成从数据生成、建模求解到结果可视化的完整流程。配套GUI界面支持参数配置、模型训练、结果预测与运行监控,增强了系统的实用性与交互性。 适合人群:具备一定MATLAB编程基础,从事新能源系统规划、电动汽车充电站运营、微电网控制或综合能源管理的技术人员与研究人员,尤其适合工作年限1-3年、希望深入掌握能源系统优化建模与工程实现的研发人员。 使用场景及目标:①优化城市公共充电站、工业园区、高速服务区等场景的光储充协同运行,降低运营成本并提高光伏利用率;②支持日前调度与滚动优化,实现从静态分析到动态调控的升级;③为储能配置、容量规划、需求响应申报及投资回报评估提供量化决策工具;④通过GUI界面实现数据驱动的模型训练与预测,辅助制定最优充放电策略。 阅读建议:此资源以MATLAB为开发平台,强调从理论建模到工程落地的全过程实践。建议读者结合代码示例与GUI操作,理解数据预处理、多目标优化、混合整数求解与结果评价的关键步骤,并通过修改权重参数、运行场景与设备配置进行灵敏度分析,从而全面掌握光储充系统优化的核心逻辑与应用潜力。 立即下载

相关推荐

FPGA高速通信双核解析:CMAC与Interlaken硬核的实战对比

本文深入对比了FPGA中两大高速通信硬核CMAC与Interlaken的核心差异与应用场景。CMAC作为标准以太网接入方案,适用于网卡、交换机等需对外互联的场景;而Interlaken则以极低延迟和高效通道化能力,专为芯片间、板间裸数据高速传输设计。文章通过实战案例与性能指标分析,为FPGA高速通信方案选型提供清晰指南。

f9g0h的博客 846

复合类型(compound type)

复合类型(compound type)是指基于其他类型定义的类型。 一条声明语句由一个基本数据类型(base type)和紧随其后的一个声明符(declarator)列表组成。每个声明符命名了一个变量并指定该变量为与基本数据类型有关的某种类型。 文章目录引用指针获取对象的地址指针值利用指针访问对象空指针void* 指针二、使用步骤1.引入库2.读入数据总结 引用 当我们使用术语“引用(reference)”时,指的其实是“左值引用(lvalue reference)”。 引用(reference)为对

qq_46513465的博客 1976

告别混乱代码!在Arduino IDE中管理多文件项目的5个必备技巧

本文分享了在Arduino IDE中管理多文件项目的5个必备技巧,帮助开发者告别混乱代码。通过代码分割和模块化设计,提升编译效率、降低内存占用,并实现功能解耦。重点介绍了头文件设计、CPP文件实现、调试技巧和工业级目录结构,让你的Arduino项目像乐高积木一样清晰易维护。

fun88的博客 361

Scala之旅-内部类(INNER CLASSES)和复合类型(COMPOUND TYPES)

Scala 中的类可以把其它类作为自己的成员。与内部类是封闭类(enclosing class)成员的 Java 语言相反,Scala 中的内部类被绑定在外部对象上。假设我们希望编译器在编译时能阻止我们,混合哪些节点属于哪个图。路径依赖类型(Path-dependent types)为此提供了一个解决办法。 为了说明这个差异,我们快速书写出图形数据类型的实现: class Graph { ...

朝花夕拾 670

Silvaco Atlas(五)——物理模型总结

物理模型总结

qsz1425AWD2121的博客 2152

手把手教你配置SAP PP供应区域(Supply Area):实现线边仓精准发料与物料流优化

本文详细解析了SAP PP供应区域(Supply Area)的配置方法,帮助企业实现线边仓精准发料与物料流优化。通过三级优先级逻辑和四步配置法,系统可自动识别最优组件来源位置,显著提升生产订单处理效率和库存准确率。文章还提供了典型问题解决方案和性能优化技巧,适用于离散制造和重复制造场景。

weixin_29275257的博客 434

Scala类型 10 :交集类型(intersection type)与联合类型(union type)

交集类型(intersection type):Scala中,复合类型(compound type)既交集类型。表达形式:X with Y with Z... 联合类型(union type): 联合类型的表现形式应该为: X or Y or Z... 在Scala中没有语法形式的支持union type;但可以通过一些技巧实现。 StackOverflow上有两种实现方式。

Freecloud 1777

第10章:位同步与Gardner环路(1)

第10章(1)内容如下:一、位同步与载波同步的区别1、采样时钟相位偏差的影响2、采样时钟频率偏差的影响二、Gardner环路算法与插值方法1、插值滤波器2、Gardner误差检查算法三、Gardner环路中环路滤波器与数字振荡器设计1、环路滤波器2、数控振荡器(NCO)四、Gardner环路的可运行MATLAB代码五、参考资料六、致谢 最近搞懂了Gardner环路的一些知识,于是更新第10章——位同步。 如果你稍不留意的话,这可能是你在网上能看到的介绍Gardner环路及其MATLAB仿真最详细的一篇文章了

weixin_44283855的博客 1万+

c++primer学习笔记(3)-Compound Types(pointers and references) and const Qualifier.

1. The concept of Compound Types: A compound type is a type that is defined in terms of another type, C++ has several compound types, two of which---references and pointers. declarations consist o

myHelperIsMe的专栏 1375

python发送邮件的时候出现 error (535, b‘5.7.3 Authentication unsuccessful‘) 解决方法

出现该Bug的原因主要是 账号密码无法登录,但原先使用该代码测试qq或者163的时候是可以通过的!问题在于各个公司邮件所处理的代码方式不一样

码农研究僧的博客 3503

海康VisionMaster与西门子PLC1200进行S7通信

通信是连通算法平台和外部设备的重要渠道,在海康VisionMaster算法平台中既支持外部数据的读入也支持数据的写出,当通信构建起来以后既可以把软件处理结果发送给外界,又可以通过外界发送字符来触发相机拍照或者软件运行。 本文以西门子PLC1200作为外部设备为例,讲解海康VisionMaster与西门子PLC1200进行S7通信。......

haier123888的博客 1万+

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

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

https://starzy1990.github.io/ 781

2024顶级提示工程工具:提升效率的12个神器

LlamaIndex虽然本身不是直接的提示词编辑工具,但其整个设计都围绕着如何有效地将外部知识融入LLM的提示词。它提供了结构化的方式来管理“上下文窗口”——即哪些私有数据应该被包含在提示词中。通过优化索引结构和检索策略,可以确保提示词中包含最相关、最高质量的上下文信息,从而大幅提升LLM基于私有数据回答问题的准确性和相关性。同时,LlamaIndex允许开发者针对不同的查询类型和数据特点定制提示词模板,这使得提示词的复用和优化更加系统化。

AIGC应用创新大全的博客 1099

深入理解Scala嵌套函数:作用域封装之道

我写这篇文章的时候,特意没罗列嵌套函数有多少种写法——因为写法很简单,谁都能写。嵌套函数为什么重要?辅助逻辑的作用域应该是多大?Java里你写辅助逻辑,只能写到类级别——因为Java的方法必须定义在类级别。但很多辅助逻辑其实只属于某一个函数,不属于整个类。你把它们写到类级别,就造成了作用域放大——本来应该是函数内部的东西,变成了类级别的东西。Scala的嵌套函数把这个问题解决了——辅助逻辑可以精确地封装在主函数内部。它直接访问外层函数的变量,不用把上下文传来传去。它不暴露到类级别,不造成API膨胀。

https://starzy1990.github.io/ 776

Outlook Express 6 (OE6) for Win7/Win8/Win10

英文版 Outlook Express6.0, 兼容Win7/Win10/WinXP,解压就可用。

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

深入理解Scala柯里化函数:函数链式变换

我写这篇文章的时候,特意没罗列柯里化有多少种写法——因为写法很简单。柯里化为什么是函数式编程的一个核心概念?因为函数式编程里,函数是一等公民——函数可以返回函数。柯里化就是这个特性的直接体现:一个多参数函数,可以看成一串单参数函数的链。这带来了什么?——参数可以分阶段传递。你先传配置,得到一个"记住了配置"的函数;以后再传数据。你先传条件,得到一个控制结构;再传执行体。Java里你做不到——Java的方法必须一次传完所有参数。你想"分阶段",只能用Builder模式,手动写一堆对象。

https://starzy1990.github.io/ 1204

ssm框架搭建

这个是一个在idea上成功跑起来的ssm框架项目,保存在这里方便以后使用直接下载

深入理解Scala偏应用函数:函数工厂设计

我写这篇文章的时候,特意没罗列偏应用函数有多少种写法——因为写法很简单,谁都能写。偏应用函数为什么重要?不是因为"它可以固定一部分参数"——而是因为它让你可以把函数当工厂用。Java里你想写一个"专用函数",怎么办?——写一个新方法,重载,或者用Builder。Scala呢?——一行占位,就把通用函数变成了专用函数。函数是一等公民,你可以加工它——固定参数、组合参数、变换参数——得到新的函数。Java的方法是死的——你定义的时候几个参数,调用的时候就得传几个。

https://starzy1990.github.io/ 421

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

深入理解Scala匿名函数:函数式编程基石

我写这篇文章的时候,特意没罗列匿名函数有多少种写法——因为写法很简单,谁都能写。匿名函数为什么是函数式编程的基石?把函数当参数传。你不能把函数当参数传,就没有map、filter、reduce这些集合操作。没有这些集合操作,就没有声明式编程。没有声明式编程,就没有函数式编程。Java花了很长时间才意识到这一点——Java 8才加了Lambda。但Java的Lambda是不完整的——它只能捕获final变量,不能修改变量。它是一个"阉割版"的闭包。Scala呢?

https://starzy1990.github.io/ 523

【Spark】 04键值对 RDD:创建、常用操作与数据分区

介绍 Spark 键值对 RDD 的创建方式、聚合、分组、连接、排序与行动操作,并结合 PageRank 示例讲解数据分区、分区器复用与自定义分区方式。

qq_46126258的博客 395

【大数据处理与分析】Spark:01 概述

本文介绍Spark内存计算框架与Scala语言特点,对比Spark与Hadoop在速度、IO开销和编程效率上的优劣,指出二者互补共存。

Morse_Chen的博客 61

深入理解Scala样例类:值对象契约

case class看起来只是"省了几十行样板代码",但它真正的价值不止于此。把"值对象应该满足的一整套契约"变成了语言层面的默认约定。容易写错(hashCode和equals不一致是经典bug)容易漏写(忘记重写equals,默默按引用比较)增加大量无意义的维护负担每个类都要重复一遍case class把这套契约固化下来,让"定义一个正确的值对象"变成零成本的事。于是你可以放心地用不可变数据建模、放心地在分布式框架里传递、放心地做模式匹配——这些正确性是编译器替你保证的。

https://starzy1990.github.io/ 453

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

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

https://starzy1990.github.io/ 635

深入理解Scala伴生对象:单例工厂与提取器

回到开头的问题:Scala为什么不用static,而要设计object?一切皆对象,一切计算都通过对象之间的消息传递完成。static是这个世界观里的"裂缝"——它让一部分方法脱离了对象体系,不能继承、不能多态、不能抽象。Scala没有去缝补这个裂缝,而是用单例对象把它彻底消除:类级别的东西,也由一个正经对象来承载。你要单例——它天生单例你要工厂——它的apply就是工厂你要模式匹配——它的unapply就是提取器你要类型类的默认实现——它是隐式查找的第一站。

https://starzy1990.github.io/ 547

深入理解Scala模式匹配:结构化解构

switch是基于值的分支——这个标量等于哪个常量match是基于结构的分支——这个数据是什么形状、由什么组成后者之所以强大,是因为它和代数数据类型(sealed + case class)、提取器(unapply)构成了一套闭环:你用样例类把数据"合"起来,用match把数据"拆"开并按结构处理,编译器还能在数据类型增加时,提醒你所有需要改动的分支位置。

https://starzy1990.github.io/ 650

深入理解Scala高阶函数:函数式编程核心

我写这篇文章的时候,特意没罗列高阶函数有多少种用法——因为用法很简单,谁都能写。高阶函数为什么是函数式编程的核心?把函数当一等公民,用函数来抽象和组合逻辑。没有高阶函数,函数就不能当参数传——那你就没有map、filter、reduce。没有这些,你就只能写for循环——命令式编程。有了高阶函数,你可以把逻辑封装成函数,传给其他函数——你可以组合函数、变换函数、生成函数。这就是函数式编程。Java花了很长时间才意识到这一点——Java 8加了Lambda和Stream。

https://starzy1990.github.io/ 535

深入理解Scala伴生类:类对象合一设计

我写这篇文章的时候,特意没罗列伴生对象有多少种写法——因为写法很简单。Scala为什么要设计伴生对象,而不是直接保留static?因为static破坏了面向对象的纯粹性。Java的静态方法不属于任何对象——它不能被继承、不能被重写、不能多态。你写一个静态方法,它就钉死在那个类上了。Scala的伴生对象是一个真正的对象——它可以继承抽象类、实现特质、混入功能。它和伴生类是平等的,只不过一个管"实例",一个管"类级别"。这就是Scala的设计哲学:在Scala的世界里,一切都是对象。

https://starzy1990.github.io/ 337
上一篇: # Scala之旅(TOUR OF SCALA)——抽象类型(ABSTRACT TYPES)
下一篇: Scala之旅(TOUR OF SCALA)——自类型(SELF-TYPE)
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值