Coldfusion 三元语句的问题 x=100; y=1; var i=len(x)?((y==1)‘PD’:‘PP’:‘PU’ 垃圾场(一);

Coldfusion 三元语句的问题 x=100; y=1; var i=len(x)?((y==1)‘PD’:‘PP’:‘PU’ 垃圾场(一);,coldfusion,conditional-operator,Coldfusion,Conditional Operator,问题是它是以PD的形式出现的,而它应该是以PP 如果我在这个gist中运行,它是有效的,只有在我的实际代码中,它的行为才是异常的 这些值不是从其他地方来的我仔细检查了一下 可能如果我用另一种方式写它,这可能会修复它,我能做的任何方式,三元逻辑本质上是“如果我的条件是真的,那么做这个,否则做那个。” <cfscript> x = 100; y = 1; var i = len(x) ? ((y == 1) ? 'PD': 'PP') : 'PU' dum

问题是它是以
PD
的形式出现的,而它应该是以
PP

如果我在这个
gist
中运行,它是有效的,只有在我的实际代码中,它的行为才是异常的

这些值不是从其他地方来的我仔细检查了一下


可能如果我用另一种方式写它,这可能会修复它,我能做的任何方式,三元逻辑本质上是“如果我的条件是真的,那么做这个,否则做那个。”

<cfscript>
    x = 100;
    y = 1;
    var i = len(x) ? ((y == 1) ? 'PD': 'PP') : 'PU'
    dump(i);
</cfscript>

x=100;
y=1;
变量i=len(x)?((y==1)?'PD':'PP'):'PU'
垃圾场(一);
如前所述,您拥有的是:

如果长度为x,则(如果y为1,则为'PD',否则为'PP'),否则为'PU'

步骤1:
len(x)
>>x是数字100,但被转换为字符串“100”,其长度为3。但由于三元是有条件的,
len(x)
true
。所以“PU”不是答案

第2步:
y==1
>>另一个条件。既然您已经将
y
设置为
1
,那么这也是
true
。所以答案将是第一部分,或“PD”

步骤3:
i
根据上述三元操作设置为
'PD'


你得到的答案是正确的。

在我退休的程序员看来,答案似乎是
PD
,因为y等于1。为什么您认为它应该是
PP
?但是在DB中,y不是1,x的len是一个数值,所以它不应该是PD,应该是PP,但不确定为什么它指向PDx是一个整数而不是字符串,len()返回字符串的长度。理论上,它应该始终计算x到3,因为它将首先将100转换为字符串,因此它将始终计算为第一个表达式,这本身就是另一个三元表达式,并且由于y是1,因此结果将是它的第一个表达式,这就是PD。如果有疑问,请使用if/else块而不是ternary,您可以帮助重写。。如果您在本地代码中得到不同的结果,那么它必须使用与您发布的不同的值。
<cfscript>
    x = 100;
    y = 1;
    var i = len(x) ? ((y == 1) ? 'PD': 'PP') : 'PU'
    dump(i);
</cfscript>