Powershell 如何使用上下文创建函数

Powershell 如何使用上下文创建函数,powershell,Powershell,我有一个散列数组,希望向散列中添加一个函数(而不是一个方法)。显然,$this没有为它定义: $x=@{ a = @{ p1 = "a"; fn = {$this.p1} } } 我也不能这样做: $x.keys |%{ $x[$_].fn = {$x[$_].p1} } 因为函数不是闭包,所以在我运行它的时候,$\uu没有定义为创建时的状态 我不想将其定义为方法(-membertype scriptmethod)的原因是我想以这种方式调用它: $x.a.fn "test" 这比: $x.

我有一个散列数组,希望向散列中添加一个函数(而不是一个方法)。显然,
$this
没有为它定义:

$x=@{ a = @{ p1 = "a"; fn = {$this.p1} } }
我也不能这样做:

$x.keys |%{ $x[$_].fn = {$x[$_].p1} }
因为函数不是闭包,所以在我运行它的时候,
$\uu
没有定义为创建时的状态

我不想将其定义为方法(-membertype scriptmethod)的原因是我想以这种方式调用它:

$x.a.fn "test"
这比:

$x.a.fn("test")
另外,我不想做:

& $x.a.fn "test"
因为用户永远不会记住所有这些选择(psh的语法太复杂)


我怎样才能做到这一点呢?

显然Psh已经关闭了!所以我可以这样做:

$x=@{ p1 = "a"; }
$x.fn = {$x.p1}.GetNewClosure();
&$x.fn
然后这样称呼它:

$x=@{ p1 = "a"; }
$x.fn = {$x.p1}.GetNewClosure();
&$x.fn

你到底想在这里完成什么?如果您只需分两步完成,那么问题的第一部分就相当容易解决。第二部分不能马上完成。我试图完成的是在对象
$x
中存储函数,并像这样调用它
$x.myfunction“params”
是的,但目的是什么?你想做的事情做不到,我试图弄清楚你最终想要通过这样做来实现的事情是否可以通过另一种方式解决
$x.myfunction“params”
从PowerShell的角度来看,这是不正确的语法。如果您想让命令由表达式定义(如
$x.a.fn
),那么它的前缀应该是调用运算符(
&
)。否则,命令应该是字符串常量。