当前位置: 首页 > 面试题库 >

如何快速重载赋值运算符

申奇希
2023-03-14
问题内容

我想为CGFloat覆盖’=’运算符,例如下面的try:

func = (inout left: CGFloat, right: Float) {
    left=CGFloat(right)
}

因此,我可以执行以下操作:

var A:CGFloat=1
var B:Float=2
A=B

能做到吗?我得到错误Explicitly discard the result of the closure by assigning to '_'


问题答案:

这是不可能的-如文档中所述:

无法重载默认赋值运算符(=)。仅复合赋值运算符可以重载。同样,三元条件运算符(a?b:c)不能重载。

如果那不能说服您,只需将运算符更改为+=

func +=(left: inout CGFloat, right: Float) {
    left += CGFloat(right)
}

并且您会注意到您将不再遇到编译错误。

产生误导性错误消息的原因可能是因为编译器将您试图重载的尝试解释为赋值



 类似资料:
  • 在《 到底什么时候会调用拷贝构造函数?》一节中,我们讲解了初始化和赋值的区别:在定义的同时进行赋值叫做 初始化(Initialization),定义完成以后再赋值(不管在定义的时候有没有赋值)就叫做 赋值(Assignment)。初始化只能有一次,赋值可以有多次。 当以拷贝的方式初始化一个对象时,会调用拷贝构造函数;当给一个对象赋值时,会调用重载过的赋值运算符。 即使我们没有显式的重载赋值运算符,

  • C++ 重载运算符和重载函数 就像其他运算符一样,您可以重载赋值运算符( = ),用于创建一个对象,比如拷贝构造函数。 下面的实例演示了如何重载赋值运算符。#include <iostream> using namespace std; class Distance { private: int feet; // 0 到无穷 int inches; // 0 到 12 public: // 所需的

  • 我知道Java不支持运算符重载,但我看到您可以为Integer对象赋值,例如,使用运算符,而不是使用setter。 所以我想知道是否有可能将这种行为实现到任何类?

  • 问题内容: 如何在Python中模拟赋值运算符重载?例如… 除了执行self.name.value = name之外,还可以如何模拟赋值运算符的重载,以便在执行self.name = myname时将myname分配给self.name.value? 问题答案: 我最终创建了一个名为ModelMeta的Model元类,该元类注册了类型化的属性。 参见http://github.com/espeed

  • 主要内容:基本赋值运算符,扩展后的赋值运算符赋值运算符用来把右侧的值传递给左侧的变量(或者常量);可以直接将右侧的值交给左侧的变量,也可以进行某些运算后再交给左侧的变量,比如加减乘除、函数调用、逻辑运算等。 Python 中最基本的赋值运算符是等号 ;结合其它运算符, 还能扩展出更强大的赋值运算符。 基本赋值运算符 是 Python 中最常见、最基本的赋值运算符,用来将一个表达式的值赋给另一个变量,请看下面的例子: 连续赋值 Python

  • 赋值运算符是指为变量或常量指定数值的符号。赋值运算符的符号为“=”,它是双目运算符,左边的操作数必须是变量,不能是常量或表达式。 其语法格式如下所示: 在 Java 语言中,“变量名称”和“表达式”内容的类型必须匹配,如果类型不匹配则需要自动转化为对应的类型。 赋值运算符的优先级低于算术运算符,结合方向是自右向左;不是数学中的等号,它表示一个动作,即将其右侧的值送到左侧的变量中(左侧只允许是变量,