Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/algorithm/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Swift 我应该更喜欢运算符重载而不是函数/方法吗?_Swift_Algorithm_Operator Overloading - Fatal编程技术网

Swift 我应该更喜欢运算符重载而不是函数/方法吗?

Swift 我应该更喜欢运算符重载而不是函数/方法吗?,swift,algorithm,operator-overloading,Swift,Algorithm,Operator Overloading,我觉得使用操作符重载会给代码增加不必要的复杂性和模糊性 在现实世界中,使用自定义运算符或重载现有运算符而不是使用函数或对象方法是否值得呢 它是经常使用还是仅仅是一种有趣的异国情调来增加一种语言的时髦感?来自wiki 运算符重载-不太常见的运算符特殊多态性是多态性的一种特殊情况,不同的运算符根据其参数具有不同的实现 Swift有40多个运营商,所有运营商都超载,我们正在定期使用他们。你更喜欢让和=值。加(另一个值)而不是让和=值+另一个值??我敢肯定,你没有!如果值是符合协议Equatable的自

我觉得使用操作符重载会给代码增加不必要的复杂性和模糊性

在现实世界中,使用自定义运算符或重载现有运算符而不是使用函数或对象方法是否值得呢

它是经常使用还是仅仅是一种有趣的异国情调来增加一种语言的时髦感?

来自wiki 运算符重载-不太常见的运算符特殊多态性是多态性的一种特殊情况,不同的运算符根据其参数具有不同的实现

Swift有40多个运营商,所有运营商都超载,我们正在定期使用他们。你更喜欢让和=值。加(另一个值)而不是让和=值+另一个值??我敢肯定,你没有!如果值是符合协议Equatable的自定义类型,==运算符必须重载,我们会定期重载

使用自定义运算符(如±,等等)是否是一个好主意?在那方面我不确定。我不是这个的超级粉丝


对于sum以外的东西,重载+运算符是个好主意吗?不,绝对不是

重载的主要原因是使用具有数学或逻辑背景的自定义
类的舒适性

比如:

  • 载体
  • 矩阵
  • 复数
  • 相量、张量、四元数
  • 有限域
  • 大数字(arbnum、biginteger、bigdecimal…)
  • 自定义精度浮动和固定格式
  • 谓词、布尔、模糊和概率
  • 字符串、列表、疑问句
  • 还有更多
如果编码正确,您可以直接编写数学方程,而不必费心转换为函数调用集。使用运算符阅读和理解数学代码要简单得多

有时甚至非严格意义上的数学课也会以这种方式使用,例如图像或信号。在DIP/CV中,通常有数学/物理方程应用于这些方程,重载运算符使其更加简单

对于非数学类

除了特殊的
operator=
之外,运算符通常是无用的/无意义的(正如您所感觉的),这对于任何具有动态分配成员的
class/struct
来说都是至关重要的。没有它,
std:vector
之类的东西将无法正常工作


另一个例子是比较运算符,它有时用于非数学类,以使排序更容易。

+1因为我有同样的感觉,但从来没有大声说出来。有趣的是,我已经在这个领域工作了一年多了,但我从未觉得有必要使用op重载。期待着看到更老练的头脑需要做什么say@NSNoob在大多数情况下,你是对的,但是当你开始做数学方面的事情(或与之相关的事情)时,事情突然发生了很大的变化,看到我的答案了吗?我的问题似乎很直截了当:
重载是否有意义?
还是我遗漏了什么?@Spectre重载运算符是具有有趣名称的函数。问题归结为有趣的名字是否有用。显然,这取决于谁来命名。名称的主要用户是人,而不是工具。不同的人喜欢不同的命名约定。问一个顽固的COBOL爱好者(如果你能找到的话)和数学家
+
是否是整数加法的好符号。@n.m.有趣的观点。。。我并没有用我的方法来处理低级代码和C++,通常它是简单的……SpktRe,感谢数学和非数学类之间的详细区分!