我已经看到很多关于为什么一元加号存在于特定语言中的问题,如:Why does F# have a unary plus operator?
What is the purpose of Java's unary plus operator?
What's the point of unary plus operator in Ruby?
Use of unary plus operator
并且他们都说'+'只是在你需要时才会超载,
或者用于执行一些罕见/不必要的语言特定任务
但为什么没有实际使用呢?
对于我来说,至少对我来说,一元“+”应该像绝对值一样:
int x = -5; //x is -5
x = +x; //x is now 5
有没有具体的理由说明为什么没有这样做? 还是因为这只对我有意义?
答案 0 :(得分: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()
的所有论据基本上都是弱的并不重要。只要大多数人认为它是正确的+
将与常规数学相同。