好的,最近我在寻找一种在PowerShell中实现空合并的方法,我遇到了这篇文章:在PowerShells中实现空聚合。
我看到了@Zenexer的评论,很感兴趣。语法如下:
Clear-Host
#expected one
"Test 1: " + ("one", "two", 1 -ne $null)[0]
#expected two
"Test 2: " + ($null, "two", 1 -ne $null)[0]
这非常有效。然而,我的一位同事(沃尔特·帕克特)和我非常感兴趣,对语法做了更多的挖掘,发现了一些真正的奇怪之处。
在我进入怪异之前,任何人都可以指出任何解释这种语法的文档吗?
## THE WEIRDNESS:
# it does not matter what the number is evidently
"Test 3: " + ($null, "two", 8675309 -ne $null)[0]
# reversing the comparison test breaks the coalesce
"Test 4: " + ($null, "two", $null -ne 1)[0]
# Moving the test into the middle of the array evidently cuts the array off
"Test 5: " + ($null, 1 -ne $null, "two").Length
# Moving the test into the middle of the array evidently cuts the array off,
# UNLESS you wrap the test with parens
"Test 6: " + ($null, (1 -ne $null), "two").Length
# The number used in the test is returned for the array value at that index
"Test 7: " + ($null, $null, 8675309 -ne $null)[0]
# The number used in the test is returned for the array value at that index,
# UNLESS you wrap the test with parens
"Test 8: " + ($null, $null, (8675309 -ne $null))[0]
# wrapping the test with parens will break the coalesce
"Test 9: " + ($null, "two", (1 -ne $null))[0]
# if all elements are null, the default value will be the value on the left
# side of the test
"Test 10: " + ($null, $null, 123456789 -ne $null)[0]
# test with an object
$conn = New-Object System.Data.SqlClient.SqlConnection
"Test 11: " + ($null, $conn, 1 -ne $null)[0].GetType()
经验教训:
这里有两个主要感兴趣的文档主题:
>
about_Arrays
about_Comparison_Operators
简而言之,对于空合并,您的工作方法:
> < li>
-ne $null
必须用作过滤器
并且过滤器必须应用于整个数组
这样,索引 [0]
将返回输入数组中的第一个非空元素。
由于它可能不明显,让我指出,正如about_Operator_Precedence
所记录的那样:
$null, 2, 3 -ne $null # returns array without $nulls: 2, 3
被解析为:
($null, 2, 3) -ne $null
显然,数字是多少并不重要。
"测试3:"($null,"二",8675309-ne$null)[0]
测试 3 按预期方式工作:-ne $null
筛选出$null
元素,因此索引 0
访问第一个非空元素。
反转比较测试会破坏合并
"测试4:"($null,"二",$null-ne 1)[0]
-网元1
返回不是1
的所有元素,其中包括$null
;因此访问索引0
在这里返回$null
。
将测试移到数组的中间显然会切断数组
"测试5:"($null,1-ne$null,"Two")。长度
$null,1 -ne $null,“两”
与:($null,1)-ne($null,“二”
)相同,并产生$null,1
,即未修饰的LHS。这是因为 -ne
与任何 LHS 元素都不匹配,因为 RHS 是一个数组,这没有得到有意义的支持。[注1]
所有其他测试都只是上述测试的变体。
<sup>[1]所发生的事情-模糊地-是在比较之前对a RHS数组进行字符串化,从而仅过滤与字符串化数组匹配的LHS元素;e、 例如,'1 2',3-ne 1,2
产生@(3)
,因为“$(1,2)”
产生值为1 2
的字符串,该字符串与第一个LHS元素匹配。
我有以下代码来解析一个JSON文件: 要处理以下JSON文件: 如果我执行此代码,我将收到以下错误: 所以我开始一步一步地调试应用程序,看看part processing()中的哪个代码部分抛出了这个异常。令人惊讶的是,那里的所有代码都正常执行:没有抛出异常,也没有返回结果I except。 更让我惊讶的是,当我稍微改变第一种方法的代码时,它可以在不产生异常的情况下工作。 我不知道println方
将< code>dplyr::arrange与< code>gtools::mixedorder一起使用时,我注意到了一个意外的结果。 考虑: 在test2中,第1列排序: 而在test3中,列的排序与使用gtools:mixedorder时预期的一样 为什么当我组合排列和混合工具时会发生这种情况?这是一个错误吗? 非常感谢,安妮克
问题内容: 我在GregorianCalendar类中遇到一个奇怪的行为,我想知道我是否真的做得不好。 仅当初始化日期的月份的实际Maximum大于我将日历设置为的月份时,才追加此值。 这是示例代码: 我知道问题是由于日历初始化日期是31天(可能是5月),与设置为2月(28天)的月份混淆了。修复很容易(只需在设置年和月之前将day_of_month设置为1),但是我想知道这确实是想要的行为。有什么
问题内容: 我正在为一个问题而苦苦挣扎,我不明白为什么它不起作用。如何通过将变量传递并转换为? 为什么在顶部代码段中不起作用,但在行下方的底部代码段中起作用? 唯一的区别似乎是添加了一个额外的变量,该变量也被键入为? 问题答案: 该是一种原始类型,同时是一个普通的Java类。您不能在原始类型上调用方法。但是该方法在上可用,如javadoc中所示 有关这些原始类型的更多信息,请参见此处
问题内容: 为什么的到哪里去了? 问题答案: 删除任何字符,并从字符串的开头和结尾。
问题内容: 我认为这是一个正常程序,但这是我得到的输出: 有人可以向我解释一下吗? 问题答案: 这是有据可查的PHP行为,请参阅php.net的foreach页面上的警告。 警告 即使在 foreach 循环之后,仍保留 $ value的 引用和最后一个数组元素。建议通过unset()销毁它。 __ 编辑 尝试逐步了解此处实际发生的情况