are*_*obo 3 .net powershell terminology
这些叫什么?在 powershell 中编写脚本时,我可以使用它们来设置或转换变量的数据类型,但是这个术语是什么?这些有官方文档吗?
例子:
$var = @("hello","world")
If ($var -is [array]) { write-host "$var is an array" }
Run Code Online (Sandbox Code Playgroud)
Don Cruickshank 的有用回答提供了一个难题,但让我尝试提供一个全面的概述:
就其本身而言,[<fullTypeNameOrTypeAccelerator>]
表达式是一种类型文字,即以实例形式对.NET 类型的System.Reflection.TypeInfo
引用,这是对其所表示的类型的丰富反射来源。
<fullTypeNameOrTypeAccelerator>
可以是 .NET 类型的全名(例如,[System.Text.RegularExpressions.Regex]
- 可选地System.
省略前缀 ( [Text.RegularExpressions.Regex]
) 或 PowerShell类型加速器的名称(例如,[regex]
)
类型文字也用于以下结构:
作为casts,如果可能,将 (RHS [1] ) 操作数强制为指定类型:
[datetime] '1970-01-01' # convert a string to System.DateTime
Run Code Online (Sandbox Code Playgroud)
作为类型约束:
到指定类型一的参数在函数或脚本变量:
function foo { param([datetime] $d) $d.Year }; foo '1970-01-01'
Run Code Online (Sandbox Code Playgroud)
到在类型锁定一个的常规 可变所有未来分配:[2]
[datetime] $foo = '1970-01-01'
# ...
$foo = '2021-01-01' # the string is now implicitly forced to [datetime]
Run Code Online (Sandbox Code Playgroud)
作为and运算符的RHS-is
-as
,对于类型测试和条件转换:
-is
不仅测试确切类型,还测试派生类型以及接口实现:
# Exact type match (the `Get-Date` cmdlet outputs instances of [datetime])
(Get-Date) -is [datetime] # $true
# Match via a *derived* type:
# `Get-Item /` outputs an instance of type [System.IO.DirectoryInfo],
# which derives from [System.IO.FileSystemInfo]
(Get-Item /) -is [System.IO.FileSystemInfo] # $true
# Match via an *interface* implementation:
# Arrays implement the [System.Collections.IEnumerable] interface.
1..3 -is [System.Collections.IEnumerable] # true
Run Code Online (Sandbox Code Playgroud)
-as
如果可能,将 LHS 实例转换为 RHS 类型的实例,$null
否则返回:
'42' -as [int] # 42
'foo' -as [int] # $null
Run Code Online (Sandbox Code Playgroud)
[1] 在运算符和数学方程的上下文中,常用的缩写 LHS 和 RHS,分别指的是左侧和右侧操作数。
[2] 从技术上讲,参数和常规变量之间没有真正的区别:类型约束在两种情况下的功能相同,但参数变量在调用时自动绑定(分配给)后,通常不会分配到再次。
归档时间: |
|
查看次数: |
100 次 |
最近记录: |