在使用"智能匹配(~~)"测试我的Perl代码的过程中,我遇到了这个问题.42,42.0,"42.0","42"之间是否有任何区别
$var1 = "42";
$var2 = "42.0";
$a = $var1 ~~ $var2;
Run Code Online (Sandbox Code Playgroud)
我得到$a0; 这意味着$var1并$var2不平等.
请解释.
amo*_*mon 26
智能匹配运营商将"通常做你想要的".请将此读作"不总是".
42 ~~ 42.0 返回true.
42 ~~ "42.0"也返回true:将字符串与数字进行比较,因此看作数字.同上"42" ~~ 42.0.
"42" ~~ "42.0"返回false:两个参数都是字符串,并且这些字符串不会比较为"相等",尽管它们的数字含义是.您不希望Perl查看"two" ~~ "two-point-oh"为真.
可以通过添加零来强制字符串进行数字解释:
0+"42" ~~ "42.0"再次返回true,因为第一个字符串被强制为数字42,第二个字符串紧随其后.
该perldoc perlsyn或perldoc perlop页面定义智能匹配如何工作的:
Object Any invokes ~~ overloading on $object, or falls back:
Any Num numeric equality $a == $b
Num numish[4] numeric equality $a == $b
undef Any undefined !defined($b)
Any Any string equality $a eq $b
Run Code Online (Sandbox Code Playgroud)
您可以看到字符串相等是默认值.
| 归档时间: |
|
| 查看次数: |
684 次 |
| 最近记录: |