7
votes

ColdFusion "Oui" EQ "vrai"; "Non" EQ "FALSE

Pourquoi est-ce? XXX

Sorties de la page. "Oui est égal à vrai."


1 commentaires

Une deuxième seconde recherche: Coldfusion "Oui" Equal "Vrai" Tourné: MaisonOffusion .COM / CFDOCS1 / CFMX / ...


6 Réponses :


2
votes

dans ColdFusion "Oui" et "TRUE" Les deux sont convertis en valeur numérique 1 lorsqu'il est utilisé comme expression


0 commentaires

10
votes

ColdFusion a des types de variables dynamiques et quelques conversions étranges au moment de l'exécution peuvent être utilisées comme booléens, dates et numéros sans les jeter à la fois des avantages et des inconvénients.

Si vous devez faire une simple comparaison de chaînes, vous pouvez utiliser la fonction Comparer () intégrée.

Ben Nadel donne un bon résumé des options de comparaison des chaînes ici - http://www.bennadel.com/blog/236-coldfusion-string-comparison-compare-vs-equals-vs-compareto-.htm


0 commentaires

13
votes

Les réponses de Chris 'et de Keshav sont correctes, ColdFusion convertit les valeurs. Voici la documentation officielle sur les conversions de données ColdFusion.

conversion entre types xxx


0 commentaires

0
votes

Dans ColdFusion, "Oui" et "TRUE" sont interprétés comme un bit (1) également "non" et "false" sont interprétés comme un bit (0), donc "oui" et "vrai" sont égaux. de la même manière xxx


0 commentaires

3
votes

Vous devez être très prudent avec les comparaisons vrai / faux. Ils doivent être simples, mais parfois, selon la façon dont vous écrivez votre code, les évaluations de VRAI / FAUX peuvent être différents. En à peu près toutes les définitions, FALSE sera toujours 0 bit (et non dans CF). Et TRUE sera 1 bit, mais aussi Oui et un nombre non-0. Donc, 42 est toujours vrai. Et -1 est toujours vrai (remerciements spéciaux MS Access Oui / Non :-p types de données).

Comme FAUX est toujours 0 (ou NON ou FAUX), il est généralement préférable de vérifier ou pas faux NEQ 0 que de vérifier TRUE. Cependant, même avec cela, vous avez toujours attention. Déterminez ce que vous voulez examiner TRUE et faire une évaluation complète pour cela. ColdFusion parfois des variables jette VRAI et FAUX différemment. Regardez les résultats du code suivant: p>

(grâce à Bert Dawson et Jamie Jackson pour leur script querySim.) P>

<!--- set up the fake query: --->
<cfscript>
/**
 * Accepts a specifically formatted chunk of text, and returns it as a query object.
 * v2 rewrite by Jamie Jackson
 * 
 * @param queryData      Specifically format chunk of text to convert to a query. (Required)
 * @return Returns a query object. 
 * @author Bert Dawson (bert@redbanner.com) 
 * @version 2, December 18, 2007 
 */
function querySim(queryData) {
    var fieldsDelimiter="|";
    var colnamesDelimiter=",";
    var listOfColumns="";
    var tmpQuery="";
    var numLines="";
    var cellValue="";
    var cellValues="";
    var colName="";
    var lineDelimiter=chr(10) & chr(13);
    var lineNum=0;
    var colPosition=0;

    // the first line is the column list, eg "column1,column2,column3"
    listOfColumns = Trim(ListGetAt(queryData, 1, lineDelimiter));

    // create a temporary Query
    tmpQuery = QueryNew(listOfColumns);

    // the number of lines in the queryData
    numLines = ListLen(queryData, lineDelimiter);

    // loop though the queryData starting at the second line
    for(lineNum=2;  lineNum LTE numLines;  lineNum = lineNum + 1) {
        cellValues = ListGetAt(queryData, lineNum, lineDelimiter);

        if (ListLen(cellValues, fieldsDelimiter) IS ListLen(listOfColumns,",")) {
            QueryAddRow(tmpQuery);
            for (colPosition=1; colPosition LTE ListLen(listOfColumns); colPosition = colPosition + 1){
                cellValue = Trim(ListGetAt(cellValues, colPosition, fieldsDelimiter));
                colName   = Trim(ListGetAt(listOfColumns,colPosition));
                QuerySetCell(tmpQuery, colName, cellValue);
            }
        } 
    }
    return( tmpQuery );
}
</cfscript>

<!--- populate the fake query --->    
<cfscript>
fakeQuery = querySim('
testID , isThisTruthy
1 | TRUE
2 | FALSE
3 | YES
4 | NO
5 | 1
6 | 0
7 | -1
8 | 42
');
</cfscript>
<!--- End of the fake query setup --->

<!--- Dump the fakeQuery so we can see what we've got. --->
<cfdump var="#fakeQuery#" label="fakeQueryInfo" />

<!--- 
    Not really necessary since the query is created above. Just included for 
    clarity, as everything above this line can really be ignored if connecting 
    to a real query. 
--->
<cfquery name="truthyCheck" dbtype="query">
    SELECT testID, isThisTruthy
    FROM fakeQuery
</cfquery>

<!--- Begin the truthy statements. --->
<br/><br/>
<strong>cfif isThisTruthy >></strong> 
<!--- 
    This one has an implicit evaluation of TRUE or FALSE that seems to be based on a
    broader (and more accurate) definition of what should be TRUE or FALSE. However,
    it's much less clear in what you're trying to do. 
--->
<br/>
<cfoutput query="truthyCheck">
    #testID#: #isThisTruthy# | <cfif isThisTruthy>True<cfelseif NOT isThisTruthy>False<cfelse>NULL</cfif> <br/>
</cfoutput>
<br/><br/>

<!--- 
    The rest of these appear to actually evaluate down to a bit (using the standard
    1,0,YES,NO,TRUE,FALSE definitions) and then they do an integer comparison. This 
    may not be completely what you're looking for.
--->
<strong>cfif isThisTruthy IS TRUE >></strong>
<br/>
<cfoutput query="truthyCheck">
    #testID#: #isThisTruthy# | <cfif isThisTruthy IS TRUE>True<cfelseif isThisTruthy IS NOT TRUE>False<cfelse>NULL</cfif> 
    <!--- 1 IS 1 IS TRUE, but -1 IS 1 IS FALSE. --->
    <br/>
</cfoutput>
<br/><br/>
<strong>cfif isThisTruthy EQ 1 >></strong>
<br/>
<cfoutput query="truthyCheck">
    #testID#: #isThisTruthy# | <cfif isThisTruthy EQ 1>True<cfelseif isThisTruthy NEQ 1>False<cfelse>NULL</cfif> 
    <!--- 1 EQ 1 IS TRUE, but -1 EQ 1 IS FALSE. --->
    <br/>
</cfoutput>
<br/><br/>
<strong>cfif isThisTruthy NEQ 0 >></strong>
<br/>
<cfoutput query="truthyCheck">
    #testID#: #isThisTruthy# | <cfif isThisTruthy NEQ 0>True<cfelseif isThisTruthy EQ 0>False<cfelse>NULL</cfif> 
    <!--- 1 NEQ 0 and -1 NEQ 0 both evaluate to the same. --->
    <br/>
</cfoutput>
<br/><br/>
<strong>cfif isThisTruthy NEQ FALSE >></strong>
<br/>
<cfoutput query="truthyCheck">
    #testID#: #isThisTruthy# | <cfif isThisTruthy NEQ FALSE>True<cfelseif isThisTruthy EQ FALSE>False<cfelse>NULL</cfif> 
    <!--- 1 NEQ 0 and -1 NEQ 0 both evaluate to the same. --->
    <br/>
</cfoutput>


1 commentaires

Voici un article assez succinct sur la façon dont la ColdFusion gère la vérité. ColdfusionMuse.com/index.cfm/2010/2/ 5 / booleans.and.coldfusio n



1
votes

Oui, 1 et True sont la même chose dans Coldfusion. Comme présenté dans ce lien:

http://help.adobe.com/en_us/ Coldfusion / 9.0 / Développement / WSC3FF6D0eA77859461172E0811Cbec09Af4-7fd0.html


0 commentaires