当前位置: 首页 > news >正文

Kotlin 运算符重载

在Kotlin中,常用的运算符重载函数名如下:

1.算术操作符:
加法:plus
减法:minus
乘法:times
除法:div
取模:rem 或 mod
整数除法:floorDiv
求幂:pow
自增:inc
自减:dec

2.比较操作符:
等于:equals 或 ==
不等于:notEquals 或 !=
大于:greater 或 >
小于:less 或 <
大于等于:greaterEquals 或 >=
小于等于:lessEquals 或 <=

3.索引操作符:
获取元素:get
设置元素:set

4.调用操作符:
调用:invoke

5.包含操作符:
包含:contains

6.类型转换操作符:
类型转换:as

7.赋值操作符:
赋值:set

8.一元操作符:
正号:unaryPlus
负号:unaryMinus
逻辑非:not

以上是一些常用的运算符重载函数名。需要注意的是,这些函数名是Kotlin语言规范的一部分,开发者应该遵循这些规则来定义运算符的行为。
下先举个简单的例子:

  1. 算术操作符
    我们可以为自定义类定义加法、减法、乘法和除法操作符的行为。
data class Point(val x: Int, val y: Int) {operator fun plus(other: Point): Point {return Point(x + other.x, y + other.y)}operator fun minus(other: Point): Point {return Point(x - other.x, y - other.y)}operator fun times(other: Int): Point {return Point(x * other, y * other)}operator fun div(other: Int): Point {return Point(x / other, y / other)}
}fun main() {val p1 = Point(1, 2)val p2 = Point(3, 4)val p3 = p1 + p2 // 相当于 p1.plus(p2)val p4 = p1 - p2 // 相当于 p1.minus(p2)val p5 = p1 * 2 // 相当于 p1.times(2)val p6 = p1 / 2 // 相当于 p1.div(2)println(p3) // 输出: Point(x=4, y=6)println(p4) // 输出: Point(x=-2, y=-2)println(p5) // 输出: Point(x=2, y=4)println(p6) // 输出: Point(x=0, y=1)
}

2.索引操作符
我们可以为自定义类定义索引操作符[]的行为。

class MyList<T>(vararg elements: T) {private val list = elements.toMutableList()operator fun get(index: Int): T {return list[index]}operator fun set(index: Int, value: T) {list[index] = value}
}fun main() {val myList = MyList(1, 2, 3)println(myList[1]) // 输出: 2myList[1] = 4println(myList[1]) // 输出: 4
}
  1. 调用操作符
    我们可以为自定义类定义调用操作符()的行为。
class Greeter(val name: String) {operator fun invoke(greeting: String): String {return "$greeting, $name!"}
}fun main() {val greeter = Greeter("Twg")println(greeter("Hello")) // 输出: Hello, Twg!
}

4.包含操作符
我们可以为自定义类定义包含操作符in和!in的行为。

class Range(val start: Int, val end: Int) {operator fun contains(value: Int): Boolean {return value in start..end}
}fun main() {val range = Range(1, 10)println(8 in range) // 输出: trueprintln(18 !in range) // 输出: true
}

以上就是在Kotlin中运算符重载的一些示例。通过运算符重载,我们可以使代码更加简洁和易读。

相关文章:

Kotlin 运算符重载

在Kotlin中&#xff0c;常用的运算符重载函数名如下&#xff1a; 1.算术操作符&#xff1a; 加法&#xff1a;plus 减法&#xff1a;minus 乘法&#xff1a;times 除法&#xff1a;div 取模&#xff1a;rem 或 mod 整数除法&#xff1a;floorDiv 求幂&#xff1a;pow 自增&…...

OpenHarmony4.1-轻量与小型系统ubuntu开发环境

因OpenHarmony官网提供包含轻量、小型与标准系统的全量代码非常宠大&#xff0c;解包后大概需要70G以上硬盘空间&#xff0c;如要编译标准系统则需要140G以上空间。 如硬盘空间有限与只使用轻量/小型OpenHarmony系统&#xff0c;则可以下载并直接使用本人裁剪源码过的ubuntu硬盘…...

AVR 单片机硬件供电处理

摘自AVR 单片机应用笔记&#xff1a;AN2519 - AVR Microcontroller Hardware Design Considerations。 2. 供电 供电设计是任何硬件设计的关键一环&#xff0c;直接影响到系统的性能。在设计供电时&#xff0c;有两个重要的方面需要考虑&#xff1a;ESD 防护和噪声干扰。这些内…...

LeetCode 27 移除元素

LeetCode 27 - 移除元素&#xff08;Remove Element&#xff09;是一个简单但经典的双指针问题&#xff0c;主要考察数组操作的基本功。虽然问题容易&#xff0c;但掌握多种解法以及衍生的变体问题对解决更复杂的操作数组问题有帮助。 题目描述 输入&#xff1a;整数数组 nums…...

对“预训练”的理解

预训练有什么用 传统的机器学习是偏数学的&#xff0c;对数据的量不做过多要求&#xff0c;而深度学习的项目通常是有大量的数据可供使用。 在平常的任务或者项目中&#xff0c;我们可能并没有大量数据&#xff0c;只有少量数据&#xff0c;在这时我们就可以通过“借用”有大…...

论文阅读:CAN GENERATIVE LARGE LANGUAGE MODELS PERFORM ASR ERROR CORRECTION?

CAN GENERATIVE LARGE LANGUAGE MODELS PERFORM ASR ERROR CORRECTION? 生成式大语言模型能否进行自动语音识别&#xff08;ASR&#xff09;纠错&#xff1f; https://arxiv.org/pdf/2307.04172 文章目录 速览常规总结通俗版 摘要&#xff08;Abstract&#xff09;2. 引言&a…...

Stable Diffusion(SD)系列模型及关联算法深度解析

一、‌基础模型架构演进‌ SD v1.5‌ ‌核心架构‌&#xff1a;基于Latent Diffusion Model&#xff08;LDM&#xff09;&#xff0c;通过VAE将图像压缩至潜空间进行扩散训练&#xff0c;支持512x512分辨率生成&#xff0c;兼容二次元与写实风格混合创作‌12。 ‌训练数据‌&…...

FPGA开发,使用Deepseek V3还是R1(3):系统级与RTL级

以下都是Deepseek生成的答案 FPGA开发&#xff0c;使用Deepseek V3还是R1&#xff08;1&#xff09;&#xff1a;应用场景 FPGA开发&#xff0c;使用Deepseek V3还是R1&#xff08;2&#xff09;&#xff1a;V3和R1的区别 FPGA开发&#xff0c;使用Deepseek V3还是R1&#x…...

logback日志输出配置范例

logback日志输出配置范例 在wutool中&#xff0c;提供了logback日志输出配置范例&#xff0c;实现日志文件大小限制、滚动覆盖策略、定时清理等功能。 关于wutool wutool是一个java代码片段收集库&#xff0c;针对特定场景提供轻量解决方案&#xff0c;只要按需选择代码片段…...

【开源免费】基于SpringBoot+Vue.JS酒店管理系统(JAVA毕业设计)

本文项目编号 T 224 &#xff0c;文末自助获取源码 \color{red}{T224&#xff0c;文末自助获取源码} T224&#xff0c;文末自助获取源码 目录 一、系统介绍二、数据库设计三、配套教程3.1 启动教程3.2 讲解视频3.3 二次开发教程 四、功能截图五、文案资料5.1 选题背景5.2 国内…...

Unity中动态切换光照贴图LightProbe的方法

关键代码&#xff1a;LightmapSettings.lightmaps lightmapDatas; LightmapData中操作三张图&#xff1a;lightmapColor,lightmapDir,以及一张ShadowMap 这里只操作前两张&#xff1a; using UnityEngine; using UnityEngine.EventSystems; using UnityEngine.UI;public cl…...

linux(2)用户管理

文章目录 1. 切换用户2. 添加删除用户3.写改密码 1. 切换用户 # 切换用户名&#xff0c;不切换工作目录 su 用户名 # 一起切换工作目录 su - 用户名 # 退出用户 exit2. 添加删除用户 # 添加用户 sudo adduser username # 推荐sudo useradd -m -s /bin/bash 用户名-m 如果创建…...

在鸿蒙HarmonyOS手机上安装hap应用

一、下载工具 安装hap包需要用到小工具 。 二、解压到目录后&#xff0c;进入该文件夹&#xff0c;打开命令行&#xff0c;如下图 三、将下载好的hap包放入刚才解压的文件夹内&#xff08;假设hap包文件名为app.hap&#xff09; 四、连接好手机和电脑&#xff0c;手机需要打…...

MacBook Pro使用FFmpeg捕获摄像头与麦克风推流音视频

FFmpeg查看macos系统音视频设备列表 ffmpeg -f avfoundation -list_devices true -i "" 使用摄像头及麦克风同时推送音频及视频流: ffmpeg -f avfoundation -pixel_format yuyv422 -framerate 30 -i "0:1" -c:v libx264 -preset ultrafast -b:v 1000k -…...

工程化与框架系列(8)--持续集成实践

持续集成实践 &#x1f504; 持续集成&#xff08;Continuous Integration&#xff0c;简称CI&#xff09;是现代前端开发流程中的重要环节&#xff0c;它通过自动化构建、测试和部署&#xff0c;帮助团队更快速、更可靠地交付高质量代码。本文将详细介绍前端持续集成的实践方…...

Python核心技术,Django学习基础入门教程(附环境安装包)

文章目录 前言1. 环境准备1.1Python安装1.2选择Python开发环境1.3 创建虚拟环境1.4 安装 Django 2. 创建 Django 项目3. Django项目结构介绍4. 启动开发服务器5. 创建 Django 应用6. 应用结构介绍7. 编写视图函数8. 配置 URL 映射9. 运行项目并访问视图10. 数据库配置与模型创建…...

【Qt-信号与槽】connect函数的用法

&#x1f3e0;个人主页&#xff1a;Yui_ &#x1f351;操作环境&#xff1a;Qt Creator &#x1f680;所属专栏&#xff1a;Qt 文章目录 1.信号和槽的概念1.1 信号的本质1.2 槽的本质1.3 补充说明2. 信号和槽的使用2.1 connect函数介绍2.2 connect函数的简单使用2.2.1 图形化方…...

计算机毕业设计SpringBoot+Vue.js景区民宿预约系统(源码+文档+PPT+讲解)

温馨提示&#xff1a;文末有 CSDN 平台官方提供的学长联系方式的名片&#xff01; 温馨提示&#xff1a;文末有 CSDN 平台官方提供的学长联系方式的名片&#xff01; 温馨提示&#xff1a;文末有 CSDN 平台官方提供的学长联系方式的名片&#xff01; 作者简介&#xff1a;Java领…...

服务流程设计和服务或端口重定向及其websocket等应用示例

服务流程设计和服务或端口重定向及其websocket等应用示例 目录 服务或端口重定向的服务设计和websocket等应用示例 一、通用请求控制流程 1.1、入口 1.2、所有GET请求首先预检控制单元 1.3、http请求会分别自动307重定向 1.4、所有请求首先执行跨源控制单元 1.5、然后…...

16. LangChain实战项目2——易速鲜花内部问答系统

需求简介 易束鲜花企业内部知识库如下&#xff1a; 本实战项目设计一个内部问答系统&#xff0c;基于这些内部知识&#xff0c;回答内部员工的提问。 在前面课程的基础上&#xff0c;需要安装的依赖包如下&#xff1a; pip install docx2txt pip install qdrant-client pip i…...

USACO历年青铜组真题解析 | 汇总

​欢迎大家订阅我的专栏&#xff1a;算法题解&#xff1a;C与Python实现&#xff01; 本专栏旨在帮助大家从基础到进阶 &#xff0c;逐步提升编程能力&#xff0c;助力信息学竞赛备战&#xff01; 专栏特色 1.经典算法练习&#xff1a;根据信息学竞赛大纲&#xff0c;精心挑选…...

同样做App开发,两种技术栈到底适合谁?看完直接选不纠结

原生开发栈的适配人群前端苹果安卓原生开发后端Java&#xff0c;是互联网行业里沿用多年的经典组合。很多从计算机相关专业科班毕业的开发者&#xff0c;最早接触的就是这套路线。大学课程里会教Java基础&#xff0c;会分方向讲Android和iOS的原生开发知识&#xff0c;毕业之后…...

C++类型推导与auto关键字

C类型推导与auto关键字 类型推导是C11引入的重要特性&#xff0c;通过auto和decltype关键字&#xff0c;编译器可以自动推导变量的类型&#xff0c;减少代码冗余并提高可维护性。 auto关键字让编译器根据初始化表达式推导变量类型。 #include #include #include #include v…...

Ollama迁移到vLLM:本地大模型服务生产化实战指南

1. 项目概述&#xff1a;为什么一个本地大模型服务迁移指南值得写满5000字&#xff1f;“From Local to Production: The Ultimate Ollama to vLLM Migration Guide”——这个标题里藏着三重现实张力&#xff1a;本地开发的便利性、生产环境的严苛性&#xff0c;以及大模型推理…...

Zephyr GPIO API 深度解析:从设备树到代码

GPIO 是嵌入式开发中最基础、最频繁打交道的外设。点灯、读按键、控制继电器、触发中断……几乎每一个项目都是从 GPIO 开始的。理解 Zephyr 的 GPIO API 设计&#xff0c;也就理解了 Zephyr 驱动模型的核心哲学&#xff1a;用设备树描述"接在哪"&#xff0c;用统一 …...

Dism++:Windows系统维护的终极免费工具,一键解决卡顿和更新问题

Dism&#xff1a;Windows系统维护的终极免费工具&#xff0c;一键解决卡顿和更新问题 【免费下载链接】Dism-Multi-language Dism Multi-language Support & BUG Report 项目地址: https://gitcode.com/gh_mirrors/di/Dism-Multi-language 你是否曾为Windows系统运行…...

【全新 v 2.7.5 版本】Open Claw 本地环境一键部署教程

前言 2026 年开源圈爆火的「数字员工」OpenClaw&#xff08;昵称小龙虾&#xff09;&#xff0c;GitHub 星标狂揽 28 万 &#xff0c;凭「本地运行 零代码操作 自动干活」的核心优势圈粉无数&#xff01;很多人误以为它是普通聊天 AI&#xff0c;实则是能真正操控电脑的自动…...

创业团队如何利用Taotoken的Token Plan有效控制AI应用开发成本

&#x1f680; 告别海外账号与网络限制&#xff01;稳定直连全球优质大模型&#xff0c;限时半价接入中。 &#x1f449; 点击领取海量免费额度 创业团队如何利用Taotoken的Token Plan有效控制AI应用开发成本 对于资源有限的创业团队和独立开发者而言&#xff0c;在项目初期将…...

QQ音乐格式转换终极指南:如何3步将.qmc文件转为MP3/FLAC

QQ音乐格式转换终极指南&#xff1a;如何3步将.qmc文件转为MP3/FLAC 【免费下载链接】qmc-decoder Fastest & best convert qmc 2 mp3 | flac tools 项目地址: https://gitcode.com/gh_mirrors/qm/qmc-decoder 你是否曾在QQ音乐下载了心爱的歌曲&#xff0c;却发现它…...

如何用SPT-AKI存档编辑器5分钟内定制你的塔科夫体验:新手终极指南

如何用SPT-AKI存档编辑器5分钟内定制你的塔科夫体验&#xff1a;新手终极指南 【免费下载链接】SPT-AKI-Profile-Editor Программа для редактирования профиля игрока на сервере SPT-AKI 项目地址: https://gitcode.com/g…...