2013-04-11 79 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