Le norme applicabili sono le seguenti:
- Il
,
è un operatore unario o binario che crea una matrice dell'operando (s), ed ha la precedenza maggiore dell'operatore +
.
- L'operatore
+
può essere utilizzato per l'aggiunta numerica, la concatenazione di stringhe e la concatenazione di array. Il tipo di dati del ha lasciato l'operando e determina il tipo di operazione da eseguire. Se possibile, l'operando destro viene castato come tipo di dati dell'operando di sinistra; se non è possibile, viene generato un errore. *
- Se la precedenza è uguale, la valutazione avviene da sinistra a destra.
- Gli array vengono rappresentati come stringhe elencando gli elementi separati da spazi.
- Le parentesi, come previsto, hanno una precedenza più alta rispetto a qualsiasi operatore e causano la valutazione dell'espressione racchiusa prima di qualsiasi elemento esterno alle parentesi.
- L'output predefinito di un oggetto array è un elenco di elementi, uno su ogni riga.
* che spiega i risultati apparentemente inconsistenti come quella "foo" + 1
restituisce foo1
, ma 1 + "foo"
si dà un errore.
Quindi, diamo un'occhiata ai casi di test e analizziamo cosa succede seguendo la logica spiegata sopra.
Caso I:
"ab", "cd"
Questo è molto semplice: l'operatore ,
crea un array di stringhe, due ab
e bc
.
Caso II:
"a" + "b", "c" + "d"
Questo sembra contro-intuitivo a prima vista; la chiave è rendersi conto che ,
viene valutato prima dello +
. Ecco come il risultato è ottenuto, passo dopo passo:
"b", "c"
viene valutata per prima (a causa ,
s' precedenza su +
), creando un array di elementi b
e c
.
- Successivamente, l'operatore
+
viene applicato a "a"
e l'array creato nel passaggio 1. Poiché l'operando di sinistra "a"
è una stringa, viene eseguita una concatenazione di stringhe.
- Per concatenare una stringa con un array, la matrice viene eseguita come stringa. Un array di
b
e c
diventa la stringa b c
.
- Concatenazione
a
con b c
rese ab c
.
- Infine,
ab c
è concatenato con d
per produrre il risultato finale, ab cd
Caso III:
"a"+"b" , ("c"+"d")
Si ottiene lo stesso risultato coincidenza; la valutazione avviene in modo diverso:
("c"+"d")
viene valutato per primo, a causa delle parentesi. Questa è una semplice concatenazione di stringhe di vaniglia, che risulta nella stringa cd
.
- Successivamente, l'operatore
,
viene applicato a "b"
e la stringa dal passaggio 1, creando una matrice di elementi b
e cd
. (Questo viene valutata prima "a" + "b"
perché ,
ha precedenza maggiore +
.)
- Poi, l'operatore
+
viene applicato "a"
e la matrice creata nel passaggio 2. Poiché l'operando sinistro è una stringa, viene eseguita una concatenazione di stringhe.
- La serie di
b
e cd
viene eseguita come stringa b cd
.
- Le stringhe
a
e b cd
sono concatenate, risultando nell'output finale ab cd
.
caso IV:
("a" + "b"), "c" + "d"
Questo è il banco di prova più interessante, e probabilmente il più intuitivo, perché produce risultati che possono apparire incoerente. Ecco come è valutato:
- Simile al Caso III punto 1,
("a" + "b")
viene valutata prima, producendo la stringa ab
.
- Il
,
viene applicato alla stringa dal passaggio 1 e "c"
, creando una matrice degli elementi ab
e c
.
- L'operatore
+
viene applicato all'array dal passaggio 2 e al token successivo, "d"
. Questa volta, l'operando di sinistra è una matrice, quindi viene eseguita una concatenazione di array.
- L'operando stringa
"d"
viene eseguito come una matrice di un elemento.
- I due array sono concatenati in una serie di elementi
ab
, c
e d
.
Caso V:
("a" + "b"), ("c" + "d")
Ormai, dovrebbe essere facile vedere cosa succede qui:
("a" + "b")
è valutato come stringa ab
.
("c" + "d")
viene considerato come la stringa cd
.
- Il
,
viene applicato alle stringhe dei passaggi 1 e 2, creando un array di ab
e cd
.
Si può vedere la precedence table con il comando
Get-Help about_Operator_Precedence
(Aiuto nomi DOC può essere scheda-compilato, in modo da salvare la digitazione, questo è help about_op
TABTAB)
fonte
2014-04-24 22:12:06
Consulta Get-Help about_operator_precedence per un elenco di tutti gli operatori e della rispettiva precedenza in un'espressione. – mjolinor