翻转运算符
计算机编程中,翻转(flip-flop)运算符是指一种运算符,当第一个操作数的值变为真,则操作符的结果从假变为真;当第二个操作数的值变为真,则操作符的结果从真变为假。Perl语言[1]和Ruby[2],以及sed和awk[1]有这种运算符。
例子
编辑下述Ruby代码将打印4至6:
(1..10).each do |x|
puts x if (x == 4 .. x == 6)
end
第一处".."是范围运算符,产生一个从1至10的整数枚举。第二处".."是翻转运算符。[3]注意,打印5时"x == 4"和"x== 6"都是假值。这是因为表达式记住了前一次循环时"x == 4"为真且"x == 6"为假。
隐患
编辑翻转运算符需要存储其状态。这使得其生命期(lifetime)对编程者难以把握,特别是在多线程或递归时使用包含翻转运算符的代码。 例如,Perl语言中每个翻转运算符有自己的在所有线程中共享的状态。[4]其他语言与之类似。
用一个双参数的函数实现翻转运算符,函数在不同的被调之间,需要保持其内部状态。
参考文献
编辑- ^ 1.0 1.1 Perl operators and precedence. [2016-10-21]. (原始内容存档于2012-07-17).
- ^ Nithin Bekal. Flip Flop Operator in Ruby. 2014-11-21 [2022-02-18]. (原始内容存档于2021-11-16).
- ^ PyCon Australia Lightning talk: Flip Flop Operators (flip floperators). 2018-08-26 [2022-07-15]. (原始内容存档于2022-02-18).
- ^ Range Operator in Perl. 2020-08-16 [2022-02-18]. (原始内容存档于2020-07-11).