递归函数调用:Powershell(作用域?)
我的菜单不好用。我想做一个菜单类,但我被v2困住了。每次我在主菜单中输入1时,它都会简单地重新显示主菜单,而不是使用新的$menuType重新输入函数递归函数调用:Powershell(作用域?),powershell,recursion,scope,powershell-2.0,Powershell,Recursion,Scope,Powershell 2.0,我的菜单不好用。我想做一个菜单类,但我被v2困住了。每次我在主菜单中输入1时,它都会简单地重新显示主菜单,而不是使用新的$menuType重新输入函数 function presentMenu{ param ([string]$menuType) if($menuType = "Main"){ Write-Host "MAIN MENU: 1.) Add Scanner 2.) Remove Scanner 3.) Lookup Scanner Config 4.) Exit"
function presentMenu{
param ([string]$menuType)
if($menuType = "Main"){
Write-Host "MAIN MENU: 1.) Add Scanner 2.) Remove Scanner 3.) Lookup Scanner Config 4.) Exit"
$command = Read-Host
##DEBUG## write-host $menuType
if ($command -eq 1){
presentMenu("addScaner")
}
elseif ($command -eq 2){
}
elseif ($command -eq 3){
}
elseif ($command -eq 4){
exit
}
elseif ($command -eq 5){
exit
}
else{
presentMenu("Main")
}
}
elseif($menuType = "addScanner"){
Write-Host "ADD SCANNER: 1.) From File 2.) From Input 3.) Back 4.) Exit"
$command = Read-Host
if ($command -eq 1){
addScannerController("File")
}
if ($command -eq 2){
addScannerController("Input")
}
if ($command -eq 3){
presentMenu("Main")
}
if ($command -eq 4){
exit
}
else{
presentMenu("addScanner")
}
}
}
try{
presentMenu("Main")
}
catch{
Write-Error $_.Exception.ToString()
Read-Host -Prompt "The above error occurred. Press Enter to exit."
}
当您在主菜单中输入1时,预期结果是显示addScanner菜单。这在我看来确实是一个范围问题,但我似乎不知道如何更正它?您使用=来比较参数,您需要使用-eq
您还有一个输入错误,在addScanner中缺少一个n
下面是一个简单的例子:
function presentMenu
{
param ([string]$menuType)
if($menuType -eq "Main")
{
Write-Host "MAIN MENU: 1.) Add Scanner 2.) Remove Scanner 3.) Lookup Scanner Config 4.) Exit"
$command = Read-Host
if ($command -eq 1)
{
presentMenu addScanner
}
}
elseif($menuType -eq "addScanner")
{
Write-Host "ADD SCANNER: 1.) From File 2.) From Input 3.) Back 4.) Exit"
$command = Read-Host
if ($command -eq 1)
{
Write-Host "Scanner added"
}
}
}
presentMenu Main
用presentMenu addScanner(无括号)替换呼叫。当您开始使用powershell时,这是一个典型的问题。函数调用没有括号。也考虑使用Switter语句,而不是…如果E.el.I..如果…=是赋值,而不是比较。顺便说一句,PowerShell不是函数式语言,而且,恕我直言,它不支持tailcall优化。你能告诉我是PS的新手吗我一直这么做,语言转换的职业危害!