0

在整个过程中,我看到了很多关于为什么一元加号存在于特定语言中的问题,例如:
为什么 F# 有一个一元加号运算符?
Java的一元加号运算符的目的是什么?
Ruby 中的一元加运算符有什么意义?
一元加号运算符的使用

他们都说“+”仅用于在需要时进行重载,
或者用于执行一些罕见/不必要的特定于语言的任务。
但是为什么没有任何实际用途呢?

一元“+”应该充当绝对值(至少对我而言)是有道理的,例如:

int x = -5; //x is -5
x = +x;     //x is now 5

是否有任何具体原因没有这样做?
还是因为这只对我有意义?

4

1 回答 1

2

它不是那样实现的,因为数学不是那样工作的。

在数学中:

note: the following is math on a blackboard, not a programming language

+ -5 = -5

- -5 = 5

以任何其他方式做这件事会让任何高中毕业的人感到困惑。

显然,以上是相当弱的答案,因为您确实可以在代码中实现 ASCII 字符“+”所采取的操作,以不同于数学。例如,在 Lisp 中,+运算符不像普通的高中数学那样工作:

;;; Adding two numbers:
+ 1 2

而在 TI 计算器上,它甚至是相反的:

1 2 +

您可能会争辩说,实现+您在编程语言中描述的方式是有意义的。关于为什么不应该这样做有许多不同的论据,包括最小意外原则、语言应该模拟问题域、这是我们在学校所教的等等。所有这些本质上都是弱论据,因为它们没有不能为机器以+与数学相同的方式处理提供根本原因。

但事情是这样的,人类是情感动物。我们喜欢熟悉的东西,对与我们所学的东西背道而驰的东西感到畏缩。程序员不喜欢因+行为与正常不同而感到惊讶。程序员是创建编程语言的人,所以他们以他们的方式实现是有道理+的。

一个程序员可能不会这样想,或者一小群人可能不会这样想,他们可以自由地创建一种以+不同方式实现的编程语言。但是他们很难让整个编程社区相信他们所做的事情是正确的。

因此,所有可以反对+采取行动的论据abs()本质上都很弱,这并不重要。只要大多数人认为它是正确的,它的+行为就会与常规数学相同。

于 2013-03-21T02:05:38.823 回答