Kotlin 操作符重载

Kotlin 操作符重载

Kotlin 通过 operator 关键字 修饰 操作符函数,来实现 操作符重载。
++ 操作,对应 inc 函数,-- 操作符,对应 dec 函数

举例,Point 类 实现 ++ 操作符重载:

class Point {operator fun inc(): Point {// 实现 ++ 重载return Point(x+1, y+1)}
}

说明:对象 遇到 操作符时,即调用 对应的 操作符函数。

操作符函数 根据 操作符 分类:

一元操作符

操作符重载函数名
a++a.inc()
a–a.dec()
!aa.not()
+aa.unaryPlus()
-aa.unaryMinus()

数学运算符

操作符重载函数名
a+ba.plus(b)
a-ba.mius(b)
a*ba.times(b)
a / ba.div(b)
a…ba.rangeTo(b)
a…<ba.rangeUtil(b)

相等操作符

操作符重载函数名
a == ba?.equals(b) ?: (b === null)
a != b!(a?.equals(b) ?: (b === null)),即 相等的 取反

比较操作符

实现了 Comparable 接口的 compareTo 方法,通过 其返回值比较。

操作符重载函数名
a > ba.compareTo(b) > 0
a < ba.compareTo(b) < 0
a >= ba.compareTo(b) >= 0
a <= ba.compareTo(b) <= 0

in 操作符

操作符重载函数名
a in ba.contains(b)
a !in b!a.contains(b)

索引 操作符

操作符重载函数名
a[i]a.get(i)
a[i] = ba.set(i, b)

invoke调用操作符

Kotlin 实现 可调用函数,基于
kotlin.jvm.functions.Function1 - 22...N
1 - 22 对应是 形参的个数,N 时 用 vararg 可变参数

实现了 invoke 操作符重载方法。

operator fun invoke(p1: P1): R
操作符重载函数名
a()a.invoke()
a(i)a.invoke(i)

属性委托操作符

在 属性委托 中,实现了 getValuesetValue 方法,实现 委托属性的 读写。
方法 添加了 operator 修饰,即 委托操作符的重载。

示例代码

++ – 重载

data class Point(var x: Int = 0, var y: Int = 0) {operator fun inc(): Point {return Point(this.x + 1, this.y + 1);}operator fun dec(): Point {return Point(this.x - 1, this.y - 1);}}fun main(args: Array<String>) {var pt = Point(0, 0)pt++pt--pt--println("pt: $pt")
}// 输出结果 
pt: Point(x=-1, y=-1)

文档

  • Kotlincn操作符重载
  • Operator overloading

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

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

相关文章

程序猿的时间管理和生产力

文章目录 为什么时间管理很重要&#xff1f;如何管理时间&#xff1f;心理维度生理维度技术尺寸 时间管理技巧每周计划基于目标的规划番茄钟为什么是25分钟&#xff1f;番茄钟为什么有效&#xff1f;艾森豪威尔矩阵这一切都是从开发者的角度来看的 也许我从开始学习或从事软件开…

HBuilderX 创建 uni-ui模板项目,为什么会提示下载失败

HBuilderX 创建 uni-ui模板项目&#xff0c;为什么会提示下载失败 HBuilderX 是一个集成开发环境&#xff08;IDE&#xff09;&#xff0c;用于开发基于uni-app的跨平台应用程序。当你在 HBuilderX 中创建 uni-ui 模板项目时&#xff0c;如果提示下载失败&#xff0c;可能有几个…

React 入门 - 01

本章内容 目录 1. 简介1.1 初始 React1.2 React 相关技术点1.3 React.js vs Vue.js 2. React 开发环境准备2.1 关于脚手架工具2.2 create-react-app 构建一个 React 项目工程 1. 简介 1.1 初始 React React JS 是 Facebook 在 2013年5月开源的一款前端框架&#xff0c;其带来…

【华为OD机试真题 JavaScript】贪吃的猴子|解题思路、代码解析

文章目录 题目描述输入输出示例1输入输出说明示例2输入输出说明示例3输入输出说明备注解题思路实现代码</

基于Java SSM框架实现实现机房预约系统项目【项目源码+论文说明】

基于java的SSM框架实现机房预约系统演示 摘要 21世纪的今天&#xff0c;随着社会的不断发展与进步&#xff0c;人们对于信息科学化的认识&#xff0c;已由低层次向高层次发展&#xff0c;由原来的感性认识向理性认识提高&#xff0c;管理工作的重要性已逐渐被人们所认识&#…

2道经典的C语言练习题(解答超详细)

文章目录 每日一言12结语⭐如果发现自己做错了&#xff0c;请不要气馁&#xff0c;做题就是一个查漏补缺的过程。每个人不是天生就会写代码的&#xff0c;给自己一些时间&#xff0c;不要放弃&#xff0c;加油陌生人&#xff01; 每日一言 当你关注到自己行为背后的意图时&…

centos 8.0 安装sysbench 1.0.17

序号步骤说明执行命令执行结果备注1 下载并解压sysbench-1.0.17.zip sysbench-1.0.17.zip2安装依赖文件 yum install automake libtool -y yum install /usr/include/libpq-fe.h 3安装sysbench cd sysbench-1.0.17 ./autogen.sh ./configure \ --prefix/sysbench \ --with-pgsq…

Arduino开发板搭配GY906、OLED0.96、IC模块实现测温系统

Arduino开发板搭配GY906、OLED0.96、IC模块实现测温系统 GY906作为测温元件&#xff08;I2C协议&#xff09; OLED实时显示温度&#xff08;I2C协议&#xff09; IC模块&#xff08;将电压信号转为4-20mA标准量&#xff09; //GY906、OLED0.96、arduino、IC模块//SCL SCL&…

快乐学Python,Python基础之组织代码「类与对象」

在上一篇文章中&#xff0c;我们了解了函数。这一篇文章我们来了解一下Python中另外一个重要的概念&#xff1a;类与对象。 1、类与对象 &#xff08;1&#xff09;类与对象有什么关系&#xff1f; 你可能会奇怪&#xff0c;为什么要叫类与对象呢&#xff1f;是两个不同的东…

Rustdesk本地配置文件存在什么地方?

环境&#xff1a; rustdesk1.1.9 Win10 专业版 问题描述&#xff1a; Rustdesk本地配置文件存在什么地方&#xff1f; 解决方案&#xff1a; RustDesk 是一款功能齐全的远程桌面应用。 支持 Windows、macOS、Linux、iOS、Android、Web 等多个平台。 支持 VP8 / VP9 / AV1 …

Nacos 学习之系列文章

系列文章目录 目录 系列文章目录 文章目录 前言 一、Nacos是什么&#xff1f; 二、Nacos的主要功能 服务发现和服务健康监测 动态配置服务 动态 DNS 服务 三、Nacos 地图 四、Nacos 生态图 总结 前言 Nacos 帮助您更敏捷和容易地构建、交付和管理微服务平台。 Naco…

白话机器学习的数学-3-评估

1、 模型评估 那我们如何测量预测函数 fθ(x)的正确性&#xff0c;也就是精度呢&#xff1f; 观察函数的图形&#xff0c;看它能否很好地拟合训练数据&#xff1a; 这是只有一个变量的简单问题&#xff0c;所以才能在图上展 示出来。 过像多重回归这样的问题&#xff0c;变量增…

pandas保存style到excel文件中

更多pandas style用法请参考&#xff1a;https://pandas.liuzaoqi.com/doc/chapter8/style.html 示例程序 import numpy as np import pandas as pd# 示例数据 dataframe pd.DataFrame({"date": pd.date_range("2024-01-01", "2024-02-01"),&…

D51+D52|接雨水

503.下一个更大元素ll 初始思路&#xff1a;这样这道题就变成了一道很纯粹的单调栈问题&#xff0c;因为只涉及了一个数组。但又因为这个数组是一个循环数组所以问题又变的有些复杂。 初始思路&#xff1a; 在循环数组的问题中&#xff0c;比较需要考虑的就是数组中最后一个…

web——德州扑克

1.此案例只用于学习 2.未接入游戏规则 HTML代码部分 <!DOCTYPE html> <html><head><meta charset"utf-8"><meta name"viewport" content"widthdevice-width"><meta name"Poker Skin" content&quo…

模式识别实验三

实验三 一  实验名称 感知器设计 二 目的和意义 使用感知器完成线性分类任务 三 操作步骤或算法结构 数据预处理。载入数据文件&#xff08; iris.csv 文件&#xff09;中的数据&#xff0c;并将其分成样本向量矩阵X和样本分类结果向量 G \bf G G。 给 4 4 4 列向量的…

【Vue3】2-5 : 指令系统与事件方法及传参处理

本书目录&#xff1a;点击进入 一、标签属性中的使用 - 指令系统 1.1 那么模板语法是否可以在标签属性中进行使用呢? ▶ 当然可以&#xff1a;使用 指令系统 二、指令系统 2.1 v-bind 2.2 v-on 三、实战 3.1 methods 选项 3.2 $event语法 一、标签属性中的使用 - 指令…

RT_Thread 调试笔记:时间相关,时钟管理函数,延时,定时器、 毫秒转换为时分秒 等

说明&#xff1a;记录日常使用 RT_Thread 开发时做的笔记。 持续更新中&#xff0c;欢迎收藏。 1. 延时函数 1. us延时函数 rt_hw_us_delay(rt_uint32_t us);//输如数据是us rt_hw_us_delay(200);//输入数据是us 2. ms延时函数 rt_thread_mdelay(1000);//输入数据是ms 2…

【教学类-综合练习-07】20240102 大4班 综合材料 (涂色类)对称动物面具,对称蝴蝶、头饰等

背景需求 年终了&#xff0c;清理库存&#xff0c;各种打印的题型纸都拿出来&#xff0c;当个别化学习材料 教学过程&#xff1a; 时间&#xff1a;2024年1月2日 班级&#xff1a;大4班 人数&#xff1a;25人 这次混了一点“EBRU湿拓郁金香”的纸片&#xff0c; 裁剪花朵…

在编写PHP代码时,遵循一些最佳实践和规范

在编写PHP代码时&#xff0c;遵循一些最佳实践和规范可以使代码更易于阅读、维护和扩展。以下是一些常见的PHP代码规范&#xff1a; 1.命名规范&#xff1a; 类名使用大写字母和下划线&#xff08;PascalCase&#xff09;的命名方式&#xff0c;例如&#xff1a;MyClass。 函数…