当前位置:  开发笔记 > 编程语言 > 正文

PowerShell是一种强类型语言吗?

如何解决《PowerShell是一种强类型语言吗?》经验,为你挑选了2个好方法。

PowerShell绝对属于动态语言类别,但它会被认为是强类型的吗?



1> JacquesB..:

在terminlogy周围存在一定程度的混淆.本文解释了类型系统的有用分类.

PowerShell是动态的,隐式类型的:

> $x=100
> $x=dir

没有类型错误 - 变量可以在运行时更改其类型.这就像Python,Perl,JavaScript,但不同于C++,Java,C#等.

然而:

> [int]$x = 100
> $x = dir
Cannot convert "scripts-2.5" to "System.Int32".

因此,如果需要,它还支持显式输入变量.但是,类型检查是在运行时而不是编译时完成的,因此它不是静态类型的.

我见过有人说PowerShell使用类型推断(因为你不必声明变量的类型),但我认为这是错误的.类型推断是在编译时进行类型检查的系统的一个特性(如varC#中的" ").PowerShell仅在运行时检查类型,因此它可以检查实际值而不是推理.

但是,有一些自动类型转换正在进行:

> [int]$a = 1
> [string]$b = $a
> $b
1
> $b.GetType()

IsPublic IsSerial Name                                     BaseType
-------- -------- ----                                     --------
True     True     String                                   System.Object

所以有些类型会在运行中进行转换.大多数定义都会使PowerShell成为弱类型语言.它肯定比Python更弱(几乎?)从不转换类型.但可能并不像Perl那样弱,它会根据需要转换几乎任何东西.


值得一提的是,像PowerShell这样的*动态类型*语言通常会得到更糟糕的错误消息和更多的运行时死亡,而不是类似Java的静态类型*.但是,即使使用*static typing*,您也可以使用空指针异常等运行时死亡,您只需获得更好的错误消息并使用*static typed*语言进行调试.

2> David Mohund..:

它可以是你需要的.

像这样:

[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] »

使用[type]表示法来指示您是否关心强类型变量.

编辑:

正如edg指出的那样,这并不妨碍PowerShell在执行(5 +"5")时将"5"解释为整数.我挖了一点,根据Windows PowerShell in Action中的 Bruce Payette ,PowerShell实际上是一种"类型混杂的语言".所以,我猜,我的答案是"有点".

推荐阅读
手机用户2502851955
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有