2013-01-16 23 views
10

Jestem przyzwyczajony do używania PHP i JavaScript, ale teraz pracuję nad projektem w Coldfusion.Ciąg na zimno == true LUB pusty == fałsz?

W PHP jestem przyzwyczajony do tego, że ciąg znaków to "prawda", a pusty/zerowy to "fałsz".

Nie wydaje się, aby było to prawdą w przypadku ColdFusion (w szczególności v8).

Chcę, aby następujące prace, ale nie można dowiedzieć się, jak zrobić CF zobaczyć ciąg jako truthy:

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

zawsze pojawia się błąd: cannot convert the value "path\to\something.cfm" to a boolean

  • isBoolean() rodzaj robót, ale nie czuje się wystarczająco odporny.
  • Nie wydaje się być `isString() - ale to byłby problem, jak powyżej w każdym razie
  • YesNoFormat() dziwnie dać mi ten sam błąd (wręcz przeciwnie, co chciałbym mieć chociaż powinien zrobić)
+1

Najlepszym rozwiązaniem byłoby sprawdzenie Len (X), które zwróci 0 lub 1+, z 1+ wartością prawdziwą. – Busches

Odpowiedz

20

ColdFusion ma podobną funkcjonalność "prawdy".

Poniższa oceni do prawdziwych

  • strun "true" lub "tak" (wielkość liter ma znaczenie)
  • Wszelkie niezerową ilość
  • wartości true

Następujące elementy zostaną ocenione na false

  • Struny "false" lub "nie" (wielkość liter ma znaczenie)
  • Zero
  • Wartość false

W CF ogólnie używamy funkcji len() celu określenia, czy ciąg ma nic to. Ponieważ liczba niezerowa odnosi się do "prawdziwej", to działa.

Twój pseudo-kod byłoby, następnie:

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

Ponieważ ColdFusion konwertuje wartości null do pustych strun, używając trim() w połączeniu byłby dobry pomysł, tak jak poniżej: <cfif len(trim(x))>.

Nie ma isString() funkcja, ale nie ma isValid(): isValid("string",x)

YesNoFormat() prostu zamienia wartość logiczną w ładnie sformatowany „Tak” lub „Nie”.

+1

W końcu poszedłem do bardziej dokładnego 'len (przycinanie (x))' – atwright147

6

Oprócz odpowiedzi ALE'S (<cfif len(x)>) Chciałem też zwrócić uwagę, że zobaczysz też ludzie użyć nieco innej składni:

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

To stwierdzenie jest bardzo zbliżony do oryginalnej próbie, ale polega jedynie na sprawdzeniu, czy jest to pusty ciąg znaków, porównując ciąg znaków, aby zobaczyć, czy jest dokładnie taki sam (jak pierwotna próba).

Tam jest dyskusja o tym, które podejście jest bardziej efektywne i czytelne tutaj na przepełnienie stosu w: len(x) better or x NEQ "" better in CFML?

To subiektywne ... chociaż ja wolę metodę ALE jest, chciałem też zwrócić uwagę na inne podejście, jak dobrze dla kompletności.

+0

Doskonały dodatek. Zwłaszcza link. – atwright147

+3

Mówiąc o subiektywnym, ColdFusion pozwala również na takie sformułowanie, które preferuję -