Строка Coldfusion == true ИЛИ empty == false?

Я использую PHP и JavaScript, но теперь я начал работать над проектом в Coldfusion.

В PHP я использую строку, являющуюся "правдивой", а empty/null - "ложной".

Это не похоже на 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() странно дает мне ту же ошибку (совершенно противоположность тому, что я хотел бы, хотя это должно было сделать)

Ответ 1

ColdFusion обладает некоторыми аналогичными функциями "правдоподобия".

Ниже будет показано значение true

  • Строки "true" или "yes" (без учета регистра)
  • Любое ненулевое число
  • Значение true

Ниже будет указано значение false

  • Строки "false" или "no" (без учета регистра)
  • Ноль
  • Значение false

В CF мы обычно используем функцию len(), чтобы определить, есть ли в ней строка. Поскольку ненулевое число оценивается как "true", это работает.

Ваш псевдокод будет, а затем:

<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() просто превращает логическое значение в хорошо отформатированное "Да" или "Нет".

Ответ 2

В дополнение к ответу ale (<cfif len(x)>), я также хотел указать, что вы также увидите, что люди используют несколько иной синтаксис:

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

Эта инструкция очень близка к вашей первоначальной попытке, но она просто проверяет, не является ли она пустой строкой, а также сравнивает строку, чтобы увидеть, точно ли она (как и ваша первоначальная попытка).

Здесь обсуждается, какой из подходов более эффективен и читаем здесь в разделе "Переполнение стека": len (x) лучше или x NEQ" " лучше в CFML?

Все субъективное... хотя я предпочитаю метод ale, я также хотел указать на другой подход и на полноту.