Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/variables/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
将变量用作运算符-Powershell_Powershell_Variables_Operation - Fatal编程技术网

将变量用作运算符-Powershell

将变量用作运算符-Powershell,powershell,variables,operation,Powershell,Variables,Operation,我开始使用Powershell并尝试做一个简单的计算器 这就是我所拥有的: Function ReturnRes ($x,$y,$z) { $res= [float] $z [float]$y return $res } Write-Host $res $var1 = Read-Host "Zahl1" $var2 = Read-Host "Zahl2" $op = Read-Host "Operator(+-*/)" ReturnRes -x $var1 -y $var2

我开始使用Powershell并尝试做一个简单的计算器

这就是我所拥有的:

Function ReturnRes ($x,$y,$z)
{
    $res= [float] $z [float]$y
    return $res
}

Write-Host $res
$var1 = Read-Host "Zahl1"
$var2 = Read-Host "Zahl2"
$op = Read-Host "Operator(+-*/)"

ReturnRes -x $var1 -y $var2 -z $op
但是我不能使用
$z
变量作为操作


有什么想法吗?

您必须使用
Invoke expression
cmdlet来完成这类工作

这就是您需要的:

Function ReturnRes ($x,$y,$z)
{
    $res= "[float]$x $z [float]$y"
    iex $res
}

您可以使用
调用表达式

PS C:\> $x,$y,$op = '1.23','3.21','+'
PS C:\> Invoke-Expression "$x$op$y"
4.44
确保验证输入:

Function Invoke-Arithmetic 
{
    param(
        [float]$x,
        [float]$y,
        [ValidateSet('+','-','*','/')]
        [string]$op
    )

    return Invoke-Expression "$x $op $y"
}

下面是另一个解决方案,将默认情况添加到交换机以处理无效运算符:

Function ReturnRes($x,$y,$z){
    switch($z){
        "+" {[float]$x + [float]$y}
        "-" {[float]$x - [float]$y}
        "*" {[float]$x * [float]$y}
        "/" {[float]$x / [float]$y}
    }
}

Write-Host $res
$var1 = Read-Host "Zahl1"
$var2 = Read-Host "Zahl2"
$op = Read-Host "Operator(+-*/)"

ReturnRes -x $var1 -y $var2 -z $op

如果您想要更大的灵活性(例如,支持trig功能的能力),您可以这样做:

$lookupFunction = @{"+"={$args[0]+$args[1]};
                    "-"={$args[0]-$args[1]};
                    "*"={$args[0]*$args[1]};
                    "/"={$args[0]/$args[1]};
                    "sin"={[math]::sin($args[0])}
                   }
Write-Host $res
$var1 = Read-Host "Zahl1"
$var2 = Read-Host "Zahl2"
$op = Read-Host "Operator(+ - * / sin)"
if ($lookupFunction.containsKey($op)) {
  # $var2 is ignored in case of sin function
  & $lookupFunction[$op] $var1 $var2
} else {
  write-host Unsupported operator: $op
}

除了比调用表达式更灵活之外,它还使用户不必知道sin函数(例如)是通过以下语法访问的:
[math]::sin(arg)

第一件事:您在函数中使用运算符的位置?很抱歉,回复太晚了。我试过了,效果很好。非常感谢,祝你度过愉快的一天