2013-04-11 71 views
1

根据代码返回0是继续的,返回1是退出。我有两个函数。两个函数都在不同的脚本中。函数在Powershell中的返回值

Function1 
{ 

call Function2 

return 1 
} 


Function2 
{ 

Stored procedure() 

} 

存储的过程有一个更新语句

Update A 
set x=y 

return 0 

我现在的问题是,当我运行期函数函数2被调用,并依次存储过程调用和更新语句运行。 存储过程在更新运行后返回值0,所以函数1中的Function2调用的值为0. 现在理想状态当Function1运行时,它应该退出,但实际上当我运行代码时会发生什么情况是Function1的值为0.ie如上所述,而不是退出代码继续运行的代码。

任何人都可以解释为什么这是行为?

+0

我真的不明白你在问什么。你期望Function1返回什么,它返回什么? – zdan 2013-04-11 18:11:26

+0

在执行Function1之后,它会返回值1,但它返回值0. – JustSam 2013-04-11 18:18:02

+0

如何调用Function1以及如何检测其返回值? – zdan 2013-04-11 18:55:38

回答

0

你确定它继续运行,并且它只返回0吗?它应该返回0(从函数2返回),然后返回1,然后退出。

+0

不,它会返回0,并继续运行..如果没有错误正弦Funtion1已得到返回0从Function2调用它忽略返回1 ...是可能的...有我错过了什么......但是当我分配FUNTION1中的Function2 cqll给变量funtion1退出正确... y这个奇怪的行为...有返回值的优先级或其他东西... – JustSam 2013-04-11 18:31:55

10

PowerShell“返回值”实际上并不像您习惯于从其他语言那样工作。重要的是要记住的是,所有输出被捕获并返回。 return声明基本上只是一个合理的出口点。

例如:

Function Return-Zero { 
    return 0 
} 

Function Return-One { 
    Return-Zero 
    return 1 
} 

Return-One 

由于Return-Zero返回值没有被存储在一个变量,它是输出的一部分。运行以上将有输出:

0 
1 

......这可能是你所得到的。如果您将Return-Zero的回报存储在变量中,则它不是输出的一部分。

Function Return-Zero { 
    return 0 
} 

Function Return-One { 
    $var = Return-Zero 
    return $var 
} 

Return-One 

以上的输出是0

+0

谢谢!我遇到了同样的问题。所以你知道任何方式来实际返回你想要的东西,放弃其他输出。输出很难以你的方式捕捉,因为你不知道一个语句是否会返回任何值。 – FrozenLand 2013-10-16 19:32:35

+0

实际的代码将决定最好的方式去做。如果你有一个可以发布的例子,那会很有帮助。 – 2013-10-17 18:31:22