Jac*_*esB 22
在terminlogy周围存在一定程度的混淆.本文解释了类型系统的有用分类.
PowerShell是动态的,隐式类型的:
> $x=100
> $x=dir
Run Code Online (Sandbox Code Playgroud)
没有类型错误 - 变量可以在运行时更改其类型.这就像Python,Perl,JavaScript,但不同于C++,Java,C#等.
然而:
> [int]$x = 100
> $x = dir
Cannot convert "scripts-2.5" to "System.Int32".
Run Code Online (Sandbox Code Playgroud)
因此,如果需要,它还支持显式输入变量.但是,类型检查是在运行时而不是编译时完成的,因此它不是静态类型的.
我见过有人说PowerShell使用类型推断(因为你不必声明变量的类型),但我认为这是错误的.类型推断是在编译时进行类型检查的系统的一个特性(如varC#中的" ").PowerShell仅在运行时检查类型,因此它可以检查实际值而不是推理.
但是,有一些自动类型转换正在进行:
> [int]$a = 1
> [string]$b = $a
> $b
1
> $b.GetType()
IsPublic IsSerial Name BaseType
-------- -------- ---- --------
True True String System.Object
Run Code Online (Sandbox Code Playgroud)
所以有些类型会在运行中进行转换.大多数定义都会使PowerShell成为弱类型语言.它肯定比Python更弱(几乎?)从不转换类型.但可能并不像Perl那样弱,它会根据需要转换几乎任何东西.
它可以是你需要的.
像这样:
[1] » [int]$x = 5
[2] » $x
5
[3] » $x = 'haha'
Cannot convert value "haha" to type "System.Int32". Error: "Input string was not in a correct format."
At line:1 char:3
+ $x <<<< = 'haha'
[4] »
Run Code Online (Sandbox Code Playgroud)
使用[type]表示法来指示您是否关心强类型变量.
编辑:
正如edg指出的那样,这并不妨碍PowerShell在执行(5 +"5")时将"5"解释为整数.我挖了一点,根据Windows PowerShell in Action中的 Bruce Payette ,PowerShell实际上是一种"类型混杂的语言".所以,我猜,我的答案是"有点".
| 归档时间: |
|
| 查看次数: |
8181 次 |
| 最近记录: |