Function 表达式作为PowerShell函数参数

Function 表达式作为PowerShell函数参数,function,powershell,operator-precedence,Function,Powershell,Operator Precedence,我几乎没有使用PowerShell的经验,所以我尝试在二进制输入时执行一些位操作(纯粹为了可读性)。我使用了以下函数来转换二进制文件和二进制文件,它们似乎可以工作 function bin($a){ return [convert]::ToString($a,2) } function unbin($a){ return [convert]::ToInt64($a,2) } 然后,我尝试运行以下程序: bin(unbin('11001101') -bxor unbin('101

我几乎没有使用PowerShell的经验,所以我尝试在二进制输入时执行一些位操作(纯粹为了可读性)。我使用了以下函数来转换二进制文件和二进制文件,它们似乎可以工作

function bin($a){
    return [convert]::ToString($a,2)
}
function unbin($a){
    return [convert]::ToInt64($a,2)
}
然后,我尝试运行以下程序:

bin(unbin('11001101') -bxor unbin('10110110'))
应为输出
1111011

令我惊讶的是,我得到的结果是
11001101
(bin的结果(unbin('11001101')))

为了让我的代码正常工作,我需要将
unbin
调用用括号括起来,我不明白为什么:

bin((unbin('11001101')) -bxor (unbin('10110110')))

为什么需要这些额外的括号?

请注意,PowerShell中的函数调用更类似于调用cmdlet,而不是.NET方法。因此,这里有很多不必要的括号,缺少一些相关的括号。下面的代码

bin(unbin('11001101') -bxor unbin('10110110'))
将一个参数传递给
bin
(括号中的完整内容),但将三个参数传递给第一个
unbin
调用。相当于

unbin '11001101' -bxor "unbin('10110110')"
(如果我没有弄错的话;细节可能会有所不同(可能是四个),但这就是要点)

调用PowerShell函数时,参数不会在括号中传递。而
-bxor
的操作数必须是表达式本身,因此任何管道都必须用括号括起来:

bin ((unbin '11001101') -bxor (unbin '10110110'))

好的,那太好了,那么为什么对象方法需要括号,例如
“test”。Split“e”
不起作用,而
“test”。Split(“e”)
起作用?请注意,我对PowerShell几乎没有什么经验,所以我现在不知道cmdlet、方法等之间的区别。NET方法的调用方式与它们在C中的工作方式类似。cmdlet和函数的设计——毕竟它是一个shell——更像shell命令,其中参数仅由空格分隔。