【发布时间】:2016-08-12 05:56:20
【问题描述】:
print "Val: " . ('a','b','c');
输出是:
c
为什么?
不管你怎么做。可能是:
sub test {
return ('a','b','c');
}
print "Val: " . test();
【问题讨论】:
-
您显示的代码不会发生这种情况。请显示您正在使用的有问题的实际代码。
-
欢迎来到 perl 独一无二的精彩世界。
.的右边需要一个标量值,因此 rhs - 一个列表 - 计算为最后一个元素“c”。 -
@JoopEggen:“欢迎来到 perl 独特的美妙世界” 请不要有部落主义。 C 和 C++ 中的逗号运算符的行为方式相同,其他语言可能也会效仿。你希望
print "Val: " . ('a','b','c')做什么?对我来说,想要什么似乎并不明显。所有三个表达式都按顺序求值,以防它们有副作用,并使用最后一个求值的值。我想不出更好的实现方式,你可以吗? -
@JoopEggen:我现在找不到它,但我读到 Java “很难做对,也很难出错” 或类似的东西。这同样适用于 C++,并且以不同的方式适用于 C。同时,Larry Wall 引用了一句话“容易的事情应该是容易的,而困难的事情应该是可能的”。我想大概总结一下。
-
@JoopEggen re“更详细”,如果你启用警告(你应该总是这样做),它会说
Useless use of a constant ("a") in void context,Useless use of a constant ("b") in void context