【问题标题】:Change boolean after using value in RHS of equation?在方程的 RHS 中使用值后更改布尔值?
【发布时间】:2016-05-22 18:58:42
【问题描述】:

我不确定是否有办法做到这一点,但我认为这是最好的地方。

我想在使用后立即更改布尔值(或之前,只需要更改语义),但在同一行。 预期的效果将与此代码相同:

bool flag, tempFlag; //whatever names
...

tempFlag = flag;
flag = !flag;

但我想知道是否有一种简写方式可以在一行中完成。类似tempFlag = flag!; :P

例如,您可以在单行中使用 int 的值后立即更改其值,如下所示:

int x = y++;

有没有写这种动作的捷径?

我的具体问题是 C#,但我很好奇其他流行语言是否有这种方式。

【问题讨论】:

  • 为什么要写一行别人可能看不懂的语法,而你可以写两行每个人都知道你在做什么?
  • @NathanOliver 感谢您的意见。是的,在大多数情况下我同意你的看法。然而,这只是一个我正在努力并试图拒绝的个人实验项目。行数减少到最低限度,所以我觉得没有必要让代码具有难以置信的可读性(只要我了解上下文,我就知道我会理解它)。
  • 你现在这么说,但三年后你又回到它,你又忘记了它。然后你会想知道你到底在做什么。我很感激尝试减少行数,但恕我直言,您不应该为此牺牲可读性。
  • 您也可以编写自己的类型,隐式转换为/从 bool 和重载 ++ 我想..

标签: java c# c++ boolean


【解决方案1】:
tempFlag = !(flag = !flag);

应该适用于所有提到的语言。 flag = !flag 返回新值,然后再次反转并放入tempflag。但正如 NathanOliver 提到的,我认为没有必要做这样的事情。如果您希望它是线程安全的(这是我能想象到的唯一应用程序,我什至不确定它是否会工作)使用线程锁来实现它。

【讨论】:

  • 非常有创意(而且晦涩)。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2014-01-06
  • 1970-01-01
  • 1970-01-01
  • 2021-12-12
  • 1970-01-01
  • 2021-10-27
  • 1970-01-01
相关资源
最近更新 更多