No Powershell parece que a lista de parâmetros para uma função é um construtor de array, mas às vezes () é permitido e às vezes não, por exemplo ao chamar a função sobrecarregada getHashCode(). Alguém pode explicar o que está acontecendo com isso?
Aqui está uma função simples e os resultados curiosos:
function onBattery {
>> if ((Get-WmiObject -Class Win32_Battery | Select-Object -ExpandProperty batterystatus) -eq 2) {
>> write-output "Plugged In"
>> }
>> else {
>> write-output "On Battery"
>> }
>> }
PS C:\tmp>
PS C:\tmp> (onBattery).getHashCode
OverloadDefinitions
-------------------
int GetHashCode()
PS C:\tmp> (onBattery).getHashCode()
62670595
PS C:\tmp> onBattery($null)
Plugged In
PS C:\tmp> onBattery ($null)($null)
Plugged In
PS C:\tmp> onBattery()
At line:1 char:11
+ onBattery()
+ ~
An expression was expected after '('.
+ CategoryInfo : ParserError: (:) [], ParentContainsErrorRecordException
+ FullyQualifiedErrorId : ExpectedExpression
Além disso, por curiosidade, o que seria necessário para fazer com que uma função PS pudesse ser chamada por meio de um conjunto vazio de parênteses como este: onBattery()?
Eu diria que essa pode ser uma questão mais para o Stackoverflow do que para o SF, no entanto...
getHashCode()
que você referencia é um "método", NÃO uma "função". Embora sejam semelhantes em muitos aspectos, eles não são iguais.Acredito que a principal diferença é que funções podem ser completamente independentes, por exemplo, PODEM ter parâmetros passados para elas, mas isso não é obrigatório. Métodos são associados a um objeto, então exigem que algo seja passado para eles.
Você pode ter visto outros tipos de métodos por aí, por exemplo, GetType() é um método, não uma função.
Como é uma função, você pode simplesmente chamá-la como
onBattery
nenhuma outra.Mais informações detalhadas podem ser encontradas aqui: https://stackoverflow.com/questions/155609/whats-the-difference-between-a-method-and-a-function