【发布时间】:2023-03-03 22:58:01
【问题描述】:
在事件处理程序中,我正在响应值的更改。我可以访问旧值和新值,并希望根据更改的内容做某些事情。
每个不同的结果都会执行某种操作/功能 X、Y 或 Z 的组合。Z 接受介于 -1 和 1 之间的参数。执行这些操作的顺序并不重要。
看看下面的逻辑网格。旧值是标签的最左边一列,新值是标签的顶行:
New:
0 !=0
-------- -------
Old: 0 | nothing Y, Z(1)
!=0 | X, Z(-1) X, Y -- Z(0) is okay but not required for this quadrant
有什么好的方法来表示这个?
我正在使用 C# 工作,但我会接受任何语言的答案,因为这不是一个真正的语言问题——我可以翻译任何内容。
例子:
if (oldvalue == 0 && newvalue == 0) return;
if (oldvalue != 0) X();
if (newvalue != 0) Y();
Z(oldvalue != 0 ? -1 : 0 + newvalue != 0 ? 1 : 0);
我想这看起来不错,但还有其他方法可以做到。
int which = (oldvalue == 0 ? 0 : 1) + (newvalue == 0 ? 0 : 2)
switch (which) {
case 1:
X(); Z(-1);
break;
case 2:
Y(); Z(1);
break;
case 3:
X(); Y();
break;
}
这实际上比我正在处理的情况要简单一些。如果 oldvalue 和 newvalue 不为零且彼此相等,则将 newvalue 视为 0。
随意回答给定或附加限制。还有一点点,但我认为开始时太多了。如果事后看起来很有趣,我将在此处或在新问题中介绍其余部分。
我想我是在问这个问题,因为我经常会遇到这些逻辑网格的东西,而且它们并不总是 2x2,有时它们会更大一些。很高兴注意到我可以处理带有整个“条纹”的一些响应,例如注意到每次 oldvalue != 0 时 X 都会完成,但似乎我开始遇到一种模式,需要一些表达逻辑来处理它更普遍,而不是费力地将其变成 if then else 语句。我的意思是,如果我能提供一种逻辑网格并让编译器找出处理它的最佳方法,那将是非常酷的。
只是进行一些疯狂的头脑风暴:
Conditions:
oldvalue == 0 ? 0 : 1
newvalue == 0 ? 0 : 2
Actions:
X = {false, true, false, true}
Y = {false, false, true, true}
Z(-1) = true where condition = 1
Z(1) = true where condition = 2
你有什么想法?我会奖励任何物质参与。
【问题讨论】:
标签: c# language-agnostic grid logic