运算符重载不可与 flutter 中的操作数互换

问题描述 投票:0回答:1

我正在 flutter 中制作一个自定义数字类,想要在该类与普通整数和双精度数之间进行基本算术运算。 所以我在类定义中重载了乘法运算符并尝试使用它。 示例(不是实际的类,但类实现很重要:

class MyClass {
  double value;

  MyClass(this.value);

  MyClass operator *(dynamic other) {
    if (other is num) {
      return MyClass(this.value * other);
    }
    throw ArgumentError("Unsupported operation");
  }
}

void main() {
  MyClass myObject = MyClass(5.0);

  MyClass result1 = myObject * 2;
  MyClass result2 = 2 * myObject;

  print(result1.value); // Expected output: 10.0
  print(result2.value); // Expected output: 10.0
}

但是在第二种情况(

2 * myObject
)中发生的情况是我收到错误,因为您无法将
MyClass
添加到
num
,而您可以将
num
添加到
MyClass

有什么办法可以让操作符超载,从而实现第二种情况吗? (例如,就像在 C++ 中一样)

flutter dart operator-overloading
1个回答
0
投票

是的,可以使操作员过载,从而实现第二种情况。您可以定义一个新运算符,它将 num 作为其左操作数,将 MyClass 对象作为其右操作数。这是一个示例实现:

class MyClass {
  double value;

  MyClass(this.value);

  MyClass operator *(dynamic other) {
    if (other is num) {
      return MyClass(this.value * other);
    }
    throw ArgumentError("Unsupported operation");
  }

  MyClass operator +(num other) {
    return MyClass(this.value + other);
  }
}

void main() {
  MyClass myObject = MyClass(5.0);

  MyClass result1 = myObject * 2;
  MyClass result2 = 2 + myObject;

  print(result1.value); // Expected output: 10.0
  print(result2.value); // Expected output: 7.0
}

在此实现中,我们定义了一个新运算符

+
,它将 num 作为其左操作数,将 MyClass 对象作为其右操作数。该实现只是将 num 添加到 MyClass 对象的值,并返回一个新的 MyClass 对象和结果。

注意,您可以以类似的方式定义其他运算符来支持其他算术运算。

© www.soinside.com 2019 - 2024. All rights reserved.