Why you cannot use an argument that starts with a number?
This is a quick, one Act drama about how the past defines the present.
Exposition
I recently had the requirement to create a PowerShell script and was planning to use parameters that begin with a number. Something like this
functionMyFunction
{
param(
[int]$5turns<br>)<br>Write-Host$5turns
}
This turned out to be a bad idea. I got a dirty error message when calling my function:
MyFunction: Cannot process argument transformation on parameter '5turns'. Cannot convert value "-5turns" to type "System.Int32". Error: "Input string was not in a correct format."
Act 1
I was surprised to see that finding an answer is not that easy. No matter which search engine I used, all of them offered results that explained how argument conversion works. Finally I found a loooong thread that explained that coders sometime are lazy, and this is the cause of the problem. Imagine the following declaration:
int a = 1<br>int 2a = 3<br>int b = 2a
Should b be equal to 2 or should it be 3?
Well... As you can see, this is pure laziness, as we assume 2a actually means two times a, which could be represented as 2*a.
Now, let's assume I understand that it would be confusing in certain languages, but in PowerShell 2$a should never be considered as $2a.
Dénouement
Moral of the story: pay attention to the programming techniques prof. Or if you did not attend such seminars (like myself), remember, that using a parameter beginning with a number is not an option. Ehh...