我发现了一段代码,它是这样的:
for(i=((90.0E1,0x5A)<=(0x158,140.70E1)?(.28,3.45E2,0):(95.30E1,26.40E1)<=1.400E2?(1,this):(108.,0x227));i<length;i++) {
// some other code here
}
有人能帮我解释一下for()括号里的东西吗?
我发现了一段代码,它是这样的:
for(i=((90.0E1,0x5A)<=(0x158,140.70E1)?(.28,3.45E2,0):(95.30E1,26.40E1)<=1.400E2?(1,this):(108.,0x227));i<length;i++) {
// some other code here
}
有人能帮我解释一下for()括号里的东西吗?
这是一个标准的三表达式 for
语句,其中第一个表达式,即初始化器,被定义为
i = ((90.0E1,0x5A)<=(0x158,140.70E1)?(.28,3.45E2,0):(95.30E1,26.40E1)<=1.400E2?(1,this):(108.,0x227))
?:
被嵌套使用,使得事情变得更加复杂。
?:
运算符的语法如下:condition ? value if true : value if false
condition: (90.0E1,0x5A)<=(0x158,140.70E1)
value if true: (.28,3.45E2,0)
value if false: (95.30E1,26.40E1)<=1.400E2?(1,this):(108.,0x227)
value-if-false使用?:
运算符包含一个嵌套表达式,当然也可以以同样的方式进行分解。
简化十六进制和 E 数字,变成:
for(i=((900,90)<=(344,1407)?(.28,345,0):(953,264)<=140?(1,this):(108.,551));i<length;i++)
((900,90)<=(344,1407)?(.28,345,0):(953,264)<=140?(1,this):(108.,551)) == 0;
这使得代码等价于:
for(i=0;i<length;i++)
这是一种非常有创意和具有迷惑性的制作 for
循环的方式,也是一个好笑话。