2014-02-10 40 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属性。此外,我实例化一个对象实例并传递一个引用。

相关问题