Function 表达式作为PowerShell函数参数
我几乎没有使用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
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命令,其中参数仅由空格分隔。