2013-01-16 11 views
10

Sono abituato a usare PHP e JavaScript, ma ora ho iniziato a lavorare su un progetto in Coldfusion.Coldfusion string == true O vuoto == false?

In PHP sono abituato a una stringa "sincera" e vuota/nulla "falsa".

Questo non sembra essere vero con ColdFusion (in particolare v8).

Voglio fare il seguente lavoro, ma non riesce a capire come rendere CF vedere la stringa come truthy:

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

ottengo sempre l'errore: cannot convert the value "path\to\something.cfm" to a boolean

  • isBoolean() sorta di opere, ma non si sente abbastanza robusto.
  • Non sembra essere un `IsString() - ma questo sarebbe problema come sopra in ogni caso
  • YesNoFormat() stranamente mi danno lo stesso errore (tutto il contrario di quello che avrei anche se dovrebbe fare)
+1

La tua migliore scommessa sarebbe quella di controllare Len (X), che restituirà 0 o 1+, con 1+ valutazione vera. – Busches

risposta

20

ColdFusion ha alcune funzionalità di "sincerità" simili.

Di seguito valuterà a veri

  • Le stringhe "vero" o "sì" (case insensitive)
  • Qualsiasi numero diverso da zero
  • Il valore true

Quanto segue verrà valutato su false

  • Le stringhe "false" o "no" (case insensitive)
  • Zero
  • Il valore false

In CF usiamo generalmente la funzione len() per determinare se una stringa ha nulla in esso. Dal momento che un numero diverso da zero valuta "vero", questo funziona.

tuo pseudo-codice sarebbe, quindi:

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

Da ColdFusion converte i null in stringhe vuote, utilizzando trim() in combinazione sarebbe una buona idea, in questo modo: <cfif len(trim(x))>.

Non esiste una funzione isString(), ma non v'è isValid(): isValid("string",x)

YesNoFormat() trasforma semplicemente un valore booleano in una ben formattata "Sì" o "No".

+1

Alla fine sono andato per il più approfondito 'len (trim (x))' – atwright147

6

Oltre alla risposta di ale (<cfif len(x)>), ho anche voluto sottolineare che dove si può vedere la gente usa una sintassi leggermente diversa:

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

questa affermazione è molto vicino al vostro tentativo di originale, ma sta semplicemente controllando se è una stringa vuota, o confrontando la stringa per vedere se è esattamente la stessa (come il tuo tentativo originale).

C'è una discussione su quale approccio è più efficiente e leggibile qui su Stack Overflow in: len(x) better or x NEQ "" better in CFML?

E 'tutto soggettivo ... anche se io preferisco il metodo di ale, volevo anche sottolineare l'altro approccio bene per completezza.

+0

Eccellente aggiunta. Soprattutto il link. – atwright147

+3

Parlando di soggettivo, ColdFusion consente anche questa formulazione che preferisco -