2014-02-10 41 views
2

我想用一個方法創建一個自定義對象,該方法需要多個參數。我已經成功地補充說,一個參數的方法,它似乎工作:在PowerShell中使用多個參數實現自己的方法

function createMyObject() { 
    $instance = @{} 

    add-member -in $instance scriptmethod Foo { 
     param([string]$bar = "default") 
     echo "in Foo($bar)"  
    } 
    $instance 
} 
$myObject = createMyObject 

但每次我嘗試添加方法與時間通過簡單地增加一個[string]$secondParam需要兩個參數 - 子句帕拉姆節的調用

$myObject.twoParamMethod("firstParam", "secondParam") 

不起作用。我的語言中的錯誤消息表示「不可能將索引應用於NULL數組」。

任何提示?謝謝!

+0

我不明白你想要做什麼,但它讓我想起了一個[我回答的類似問題](http://stackoverflow.com/a/18705545/775544)過去。如果您對類似的實現感興趣,也許請看看它。 –

+0

我試圖用多個參數定義方法... – Sh4pe

回答

5

像這樣的事情似乎工作(至少在PowerShell中V4)...

add-member -in $instance scriptmethod Baz { 
    param([string]$bar = "default", [string]$qux = "auto") 
    echo "in Baz($bar, $qux)" 
} 

稱呼它,我所做的:

[PS] skip-matches> $myObject.Baz("Junk","Stuff") 
in Baz(Junk, Stuff) 

[PS] skip-matches> $myObject.Baz() 
in Baz(default, auto) 
+0

你是什麼意思「這樣的思想」?這正是我正在嘗試的代碼。你能告訴你如何在實例上調用方法嗎? – Sh4pe

+0

@ Sh4pe,我更新了我的答案,我如何測試我的代碼。 –

0

只要添加一個版本的這個,我得到了加工。

function Demo ([ref]$var) { 
    $var.Value = 5 
    $var 
    } 

[psobject] $changeMe = New-Object psobject 
$changeMe = 0 
$changeMe # Prints 0 
$v = Demo([ref]$changeMe) 
$changeMe # Prints 0, should print 5 

要爲對象分配值,您需要使用引用對象的Value屬性。此外,我實例化一個對象實例並傳遞一個引用。

相關問題