14

我习惯于使用 PHP 和 JavaScript,但我现在已经开始在 Coldfusion 中开展一个项目。

在 PHP 中,我习惯于字符串是“真”,而空/空是“假”。

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

我想做以下工作,但无法弄清楚如何让 CF 将字符串视为真实:

<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()奇怪地给了我同样的错误(与我应该做的完全相反)
4

2 回答 2

24

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

以下将评估为

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

以下将评估为

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

在 CF 中,我们通常使用该len()函数来确定字符串中是否包含任何内容。由于非零数的计算结果为“真”,因此这是可行的。

您的伪代码将是:

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

由于 ColdFusion 将 null 转换为空字符串,trim()因此结合使用将是一个好主意,如下所示:<cfif len(trim(x))>.

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

YesNoFormat()只需将布尔值转换为格式良好的“是”或“否”。

于 2013-01-16T14:46:11.567 回答
6

除了 ale 的答案 ( <cfif len(x)>),我还想指出,您还会看到人们使用稍微不同的语法:

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

该语句非常接近您最初的尝试,但它只是检查它是否为空字符串,而不是比较字符串以查看它是否完全相同(与您最初的尝试一样)。

在 Stack Overflow 上讨论了哪种方法更有效和更易读: len(x) better or x NEQ "" better in CFML?

这都是主观的……虽然我更喜欢 ale 的方法,但为了完整性,我也想指出另一种方法。

于 2013-01-16T15:04:50.120 回答