2013-01-16 38 views
10

我习惯于使用PHP和JavaScript,但我现在已经开始在Coldfusion中开发一个项目。Coldfusion字符串== true或空==错误?

在PHP中,我习惯于字符串是“truthy”,空/ null是“falsy”。

这似乎并不适用于ColdFusion(特别是v8)。

我想作以下工作,但无法弄清楚如何使CF看到的truthy字符串:

<cfset x = "path\to\something.cfm"> 
<cfif x> 
    x is truthy 
<else> 
    x is falsy 
</cfif> 

我总是得到错误:cannot convert the value "path\to\something.cfm" to a boolean

  • isBoolean()排序作品,但感觉不够健壮。
  • 似乎有不为'isString() - 但是这将是问题,因为上面反正
  • YesNoFormat()奇怪给我同样的错误(什么我会虽然它应该做的完全相反)
+1

最好的选择是检查Len(X),它将返回0或1+,1+评估为true。 – Busches

回答

20

ColdFusion对它有一些类似的“真实性”功能。

下面将评估为

  • 字符串 “true” 或 “是”(不区分大小写)
  • 任何非零数
  • true

以下将评估为false

  • 字符串“假”或“否”(不区分大小写)
  • 价值false

在CF我们一般采用len()函数来确定一个字符串有什么它。由于非零数字的计算结果为“真”,因此这可行。

你的伪代码会是这样,那么:

<cfset x = "path\to\something.cfm"> 
<cfif len(x)> 
    x is truthy 
<else> 
    x is falsy 
</cfif> 

由于ColdFusion的空值转换为空字符串,结合使用trim()将是一个不错的主意,像这样:<cfif len(trim(x))>

没有isString()功能,但有isValid()isValid("string",x)

YesNoFormat()只是简单地将一个布尔值到一个很好的格式化“是”或“否”。

+1

最后我去了更透彻的'len(trim(x))' – atwright147

6

除了强麦的答案(<cfif len(x)>),我也想指出的是,你还可以看到人们使用一个稍微不同的语法:

<cfif x neq ""> 
    x is truthy 
<cfelse> 
    x is falsy 
</cfif> 

这种说法是非常接近原来的尝试,但它只是检查它是否是空字符串,与比较字符串以查看它是否完全相同(就像您最初的尝试一样)。

有一个讨论,哪种方法更有效和可读性这里堆栈溢出在: len(x) better or x NEQ "" better in CFML?

这都是主观的......虽然我更喜欢麦酒的方法,我也想指出的另一种方法是以及完整性。

+0

优秀的加法。特别是链接。 – atwright147

+3

说到主观,ColdFusion也允许我更喜欢这个措辞 -