当前位置: 首页 > 知识库问答 >
问题:

你管这些叫什么?[数组][字符串][int]

锺离玮
2023-03-14

这些叫什么?在powershell中编写脚本时,我可以使用它们来设置或转换变量的数据类型,但这是什么术语呢?这些有官方文件吗?

示例:

$var = @("hello","world")
If ($var -is [array]) { write-host "$var is an array" }

共有1个答案

孔城
2023-03-14

Don Cruickshank有用的回答提供了一个谜题,但让我试着给出一个全面的概述:

[ ] 表达式本身就是一个类型文本,即以System.reflection.TypeInfo实例的形式对.NET类型的引用,该实例是它所表示的类型的丰富反射源。

可以是.NET类型的全名(例如,[System.Text.RegularExpressions.regex]-可以选择省略系统.前缀([Text.RegularExpressions.regex])或PowerShell类型加速器的名称(例如,[regex])

类型文字还用于以下构造:

>

  • 作为强制转换,将(RHS[1])操作数强制为指定类型,如果可能:

    [datetime] '1970-01-01'  # convert a string to System.DateTime
    
    • 请注意,PowerShell强制转换比C#灵活得多,类型转换经常隐式发生-更多信息请参阅此答案。相同的规则适用于以下列出的所有其他用途。

    作为类型约束:

    >

  • 在函数或脚本中指定参数变量的类型:

    function foo { param([datetime] $d) $d.Year }; foo '1970-01-01'
    

    为所有将来的赋值锁定常规变量的类型:[2]

    [datetime] $foo = '1970-01-01'
    # ...
    $foo = '2021-01-01' # the string is now implicitly forced to [datetime] 
    

    作为-is-As运算符的RHS,用于类型测试和条件转换:

    >

  • -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
    

    -as将LHS实例转换为RHS类型的实例(如果可能),否则返回$null:

    '42' -as [int] # 42
    
    'foo' -as [int] # $null
    

    [1]在运算符和数学方程的上下文中,通常使用首字母LHS和RHS,分别指左侧操作数和右侧操作数。

    [2]从技术上讲,参数和常规变量之间没有真正的区别:类型约束在这两种情况下的作用方式相同,但参数变量在调用时自动绑定(赋值)后,通常不会再次赋值。

  •  类似资料:
    • 问题内容: 有人可以解释为什么跟随返回“ cc”吗? 有人告诉我,因为它将每个匹配项都放入了group(1)中,所以最后一个匹配项是’cc’。真的吗? 那么下面如何解释? 问题答案: 重复捕获组:组号保持不变 由定义的组是组1。量化器重复它。每当引擎能够重复该组(匹配两个字符)时,组1就会被覆盖。 引擎开始匹配时,捕获到组1 然后捕获到组1 然后捕获到组1。 当您检查组1时,引擎将返回。所有其他捕

    • 问题内容: 我正在查看类似于以下内容的代码行: 我认为符号字符串是指每小时,每分钟等显示的数字字符的数量-或类似的东西,我不确定。 通常,我可以弄清楚这种情况,但是在Google上搜索“%02d%01d”时找不到任何有用的参考。有人能为我阐明一下吗? 问题答案: http://www.cplusplus.com/reference/clibrary/cstdio/printf/ 相同的规则应适用于

    • 以下是全部代码: 输出是: 编译器背后发生了什么导致了这些结果?

    • 问题内容: 使用以下代码时,我们的代码需要10分钟才能虹吸68,000条记录: 但是,当我们执行以下操作时,仅需1秒钟: 这是代码: 我曾经用python编写过的所有代码都使用第一个选项。这只是基本的字符串操作…我们正在从文件中读取输入,对其进行处理并将其输出到新文件中。我100%确信第一种方法的运行时间比第二种方法长约600倍,但是为什么呢? 正在处理的文件是csv,但使用〜而不是逗号。我们在这

    • 在Hugo模板中,我知道您可以使用< code>function param调用函数: 但在文档中,我还看到您还可以: 我从未遇到过这种调用函数的方式(在Ruby/Python等语言中)。这是围棋特有的,还是雨果特有的?这种调用函数的方式是如何调用的?另外,如果你有不止一种类型的论点,你能做到吗?

    • hotspot jdk1.8: 如上,需要深拷贝字符串数组,防止调用方修改. 这里clone()的行为是来源于Object对象的,貌似是拷贝的StringTable中的字符串字面量(不是字符串对象)的引用地址(值传递),不知道是不是这样的?