【发布时间】:2017-10-13 19:10:10
【问题描述】:
考虑一下:
SWITCH ($mode)
{
MODE1
{
}
MODE2
{
}
MODE3
{
}
}
可以不执行整个SWITCH语句直接调用MODE1、MODE2或MODE3下的代码吗?
我有一种情况,MODE3只有在MODE2完成后才能运行,而MODE2只有在MODE1完成后才能运行。我已将每个 MODE 的所有代码移动到一个单独的函数中。但是,确定先前模式是否已完成的逻辑规模越来越大,代码重复,而且令人困惑。
例如:
SWITCH ($mode)
{
MODE1
{
DoMode1
if (!Mode1Complete) { Exit }
}
MODE2
{
if (!Mode1Complete) { DoMode1 }
if (!Mode1Complete) { Exit }
DoMode2
}
MODE3
{
if (!Mode2Complete)
{
if (!Mode1Complete)
{
DoMode1
if (!Mode1Complete) { Exit }
DoMode2
if (!Mode2Complete) { Exit }
}
else
{
DoMode2
if (!Mode2Complete) { Exit }
}
}
DoMode3
}
}
您可以看到这将变得多么复杂!
我想做的是这样的:
SWITCH ($mode)
{
MODE1
{
DoMode1
If (!Mode1Complete) { Exit }
}
MODE2
{
if (!Mode1Complete)
{
#Call MODE1
}
if (!Mode1Complete) { Exit }
DoMode2
}
MODE3
{
if (!Mode2Complete)
{
#Call MODE2
}
if (!Mode2Complete) { Exit }
DoMode3
}
}
请注意“MODEx”只是一个例子。实际情况不会像这样按数字顺序排列。它们将是不同的词。
有什么想法可以做到这一点吗?
【问题讨论】:
-
看起来您正在构建某种状态机...不要使用
switch,并尝试使用if语句、重构函数等来实现完整的流程控制。 -
您可能需要考虑创建流程图来确定工作流程以及重复循环发生的位置;然后根据它设计你的代码。如果您没有 Visio 或其他软件,可以在 draw.io 在线免费制作流程图。
标签: powershell switch-statement