2016-02-26 11 views
1

在PowerShell中,我試圖做到這一點:內聯函數調用,其中一種表達預計

$binRoot = ($path, Get-BinPath)[$path -eq $null] 

這裏,Get-BinPath是前面定義的函數。我得到的這行說,一個錯誤:

At C:\repos\hub\test.ps1:12 char:20 
+ $binRoot = ($path, Get-BinPath)[$path -eq $null] 
+     ~ 
Missing expression after ','. 
At C:\repos\hub\test.ps1:12 char:21 
+ $binRoot = ($path, Get-BinPath)[$path -eq $null] 
+      ~~~~~~~~~~~ 
Unexpected token 'Get-BinPath' in expression or statement. 

我可以通過拆分工作分成兩個語句,並引入一個臨時變量解決這個問題 - 但它會是不錯的做在同一行。即使這是不好的禮節,我仍然只是好奇如何做到這一點。

+0

另外:我建議養成一種習慣,把一個文字與_LHS_ - '$ null -eq $ path'進行比較,在此大小寫 - 如果被比較的變量碰巧是一個集合(數組),可以避免出現意外。 – mklement0

回答

1

Get-BinPath置於括號內;這導致函數作爲表達式,即,被評價爲,如果它正在分別稱爲:

$binRoot = ($path, (Get-BinPath))[$path -eq $null] 
1
$binRoot = if ($path -ne $null) {$path} else {Get-BinPath} 

是幾個字符長。然而,它不那麼神祕和易於閱讀(理解,維護等)。