首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >我可以输入存储在变量中的switch语句吗?

我可以输入存储在变量中的switch语句吗?
EN

Stack Overflow用户
提问于 2022-11-30 17:47:24
回答 1查看 32关注 0票数 2

我有一个变量来存储一个开关语句

代码语言:javascript
运行
AI代码解释
复制
$com = '
switch ($_)
{
    1 {"It is one."}
    2 {"It is two."}
    3 {"It is three."}
    4 {"It is four."}
}
'

我正在尝试输入数字以运行开关语句。

类似于:

1 | iex($com)

EN

回答 1

Stack Overflow用户

发布于 2022-11-30 18:52:13

你的选择是:

process block

  1. scriptblockfunction

代码语言:javascript
运行
AI代码解释
复制
$com = {
    process {
        switch ($_) {
            1 { "one."   }
            2 { "two."   }
            3 { "three." }
        }
    }
}

function thing {
    process {
        switch ($_) {
            1 { "one."   }
            2 { "two."   }
            3 { "three." }
        }
    }
}

1..3 | & $com
1..3 | thing

functionality:

  1. A filter,完全相同

代码语言:javascript
运行
AI代码解释
复制
filter thing {
    switch ($_) {
        1 { "one."   }
        2 { "two."   }
        3 { "three." }
    }
}

1..3 | thing

使用expression):的

  1. (这需要字符串ScriptBlock.Create method中的process块)

代码语言:javascript
运行
AI代码解释
复制
$com = '
process {
    switch ($_) {
        1 { "one."   }
        2 { "two."   }
        3 { "three." }
    }
}
'

1..3 | & ([scriptblock]::Create($com))

  1. 使用ScriptBlock.InvokeWithContext methodautomatic variable $input,这个技术不流,也需要一个外部scriptblock才能工作,它只是为了展示,应该作为一个选项被丢弃:

代码语言:javascript
运行
AI代码解释
复制
$com = '
switch ($_) {
    1 { "one."   }
    2 { "two."   }
    3 { "three." }
}
'

1..3 | & { [scriptblock]::Create($com).InvokeWithContext($null, [psvariable]::new('_', $input)) }

  1. 使用Invoke-Expression,还需要一个带有process块的外部scriptblock (应该放弃--从上面显示的所有技术来看-这是最糟糕的技术之一,字符串表达式是通过管道传递的每个项的计算值):

代码语言:javascript
运行
AI代码解释
复制
$com = '
switch ($_) {
    1 { "one."   }
    2 { "two."   }
    3 { "three." }
}
'

1..3 | & { process { Invoke-Expression $com } }
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/74636087

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档