Dart可重载的运算符有哪些?重载一元--运算符VSCode报红如何解决?
Dart 运算符重载相关问题解答
报错核心原因
你写的operator --定义触发编辑器红色报错,完全是符合Dart语法规则的表现:Dart 从设计层面就不支持重载--(自减)、++(自增)这两类前后缀一元运算符。这类操作在Dart中本质是编译器实现的语法糖,并非独立的可重载运算符实体,对应的自定义语法从根上就不被允许,哪怕添加@override注解也无法绕开静态语法校验,自然会持续报红。
你之前在代码里实现的无参operator -()、有参operator +都在官方允许的重载范围内,因此不会触发报错。
官方可重载运算符完整清单
Dart 语言规范中对可自定义重载的运算符有明确固定的列表,没有模糊地带,具体包含以下类别:
- 二元算术运算符:
+、-、*、/、~/(整除)、%(取模) - 一元前缀运算符:
-(数值取反)、~(按位取反)、!(逻辑取反) - 关系比较运算符:
==、<、>、<=、>= - 位运算运算符:
&、|、^、<<、>>、>>>(无符号右移) - 下标访问运算符:
[](索引读取)、[]=(索引赋值)
补充说明:你代码中写的无参operator +()(即一元正号运算符)其实并不在可重载列表内。一元+在Dart中是无实际运算语义的内置运算符,所有类型调用它都会直接返回自身,自定义实现没有任何实际作用。
替代实现方案
如果确实需要给Point类实现坐标自减1的逻辑,不需要强行套用--的重载语法,直接定义普通实例方法实现即可,比如:
// 替换原错误的operator -- 实现 Point decrement() { _x -= 1; _y -= 1; return this; }
内容的提问来源于stack exchange,提问作者Display Name
相关产品推荐
相关产品推荐

