函数中更改的全局变量无效
Global variable changed in function not effective
我刚试过这段代码:
$m=2
function f
{
$m=3
}
f
$m
我预计函数 f
会将 $m
更改为 3。但实际输出仍然是 2。为什么? $m
是一个全局变量,在f
里面不是有效吗?
不,恐怕 PowerShell 不是那样设计的。您必须考虑 scopes
,有关此主题的更多信息,请阅读 PowerShell 帮助 about scopes 或在您的 PowerShell ISE/Console.
中键入 Get-Help about_scopes
简短的回答是,如果你想改变一个在全局范围内的变量,你应该解决全局范围:
$Number = 2
Function Foo {
$Global:Number = 3
}
Foo
$Number
在 Function
内部创建的所有变量在函数外部不可见,除非您明确将它们定义为 Script
或 Global
。最好将函数的 result 保存在另一个变量中,这样您就可以在脚本范围内使用它:
$Number = 5
Function Foo {
$Number * 10
}
$Result = Foo
# Now you can use the value outside the function:
"The result of the function was '$Result'"
我刚试过这段代码:
$m=2
function f
{
$m=3
}
f
$m
我预计函数 f
会将 $m
更改为 3。但实际输出仍然是 2。为什么? $m
是一个全局变量,在f
里面不是有效吗?
不,恐怕 PowerShell 不是那样设计的。您必须考虑 scopes
,有关此主题的更多信息,请阅读 PowerShell 帮助 about scopes 或在您的 PowerShell ISE/Console.
Get-Help about_scopes
简短的回答是,如果你想改变一个在全局范围内的变量,你应该解决全局范围:
$Number = 2
Function Foo {
$Global:Number = 3
}
Foo
$Number
在 Function
内部创建的所有变量在函数外部不可见,除非您明确将它们定义为 Script
或 Global
。最好将函数的 result 保存在另一个变量中,这样您就可以在脚本范围内使用它:
$Number = 5
Function Foo {
$Number * 10
}
$Result = Foo
# Now you can use the value outside the function:
"The result of the function was '$Result'"