我们都熟悉增量前和增量后运算符,例如
c++; // c = c + 1
++c; // ditto
和扩展这一原则的“联合运营商”:
c += 5; // c = c + 5
s .= ", world"; // s = s . ", world"; e.g. PHP
我经常需要一个'后组合操作员',这将允许:
s =. "Hello "; // s = "Hello " . s
显然,这对非可变操作符非常有用,并且即使借用了语法,其含义也会从前/后增量中改变。
您是否了解提供此类运营商的任何语言,为什么它不常见?
答案 0 :(得分:3)
对给定示例的基本反对意见是它会产生歧义:
a=-5; //'a = -5' or 'a =- 5'?
b=*p; //'b = *p' or 'b =* p'?
c=.5; //'c = .5' or 'c =. 5'?
编辑但不,我不知道有任何语言使用它们。据推测,这是因为它们从C中被省略,而大多数其他语言都是从这些语言中派生出来的。
是的,我很乐意用我使用的语言看到它们。
答案 1 :(得分:2)
组合'op ='运算符是var = var op predicate
的简写,但op不一定是特别的。 '.'
运算符恰好是多种语言中“追加”操作的简写,但没有什么可以阻止你定义“prepend”操作 - 甚至改变追加到prepend - 用任何允许重载的语言对于您要使用的任何数据类型的操作符(或者您可能用于包含该数据的任何对象)。如果你想为textvar /= newtext
提供textobj = textobj->prepend(newtext)
简写,那就没有什么能阻止你了。
那就是说,你可能永远不会这样做,因为没有办法在不引起混乱的情况下改变现有的操作员。更改语句顺序变得非常容易(也更清晰),这样您就可以从左到右,或使用unshift
之类的特定函数来预先添加任何模糊内容。
答案 2 :(得分:0)
我不知道,我认为不存在,因为它是元元指令。
为了解释,原始运算符(对于数字)来自C,它们直接映射到机器代码操作。这使得程序员可以进行优化,因为早期的编译器没有 所以,
x=x+1;
和
x+=1;
和
x++;
将生成三个不同的汇编程序输出。
现在,为字符串添加+ =是一个元命令。它不会映射到操作码,它只是跟随并扩展模式。