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と評価されます

  • 文字列「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

エールの答え(<cfif len(x)>)に加えて、人々がわずかに異なる構文を使用していることもわかることを指摘したいと思います。

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

このステートメントは元の試行に非常に近いものですが、文字列が空の文字列であるかどうかを確認するだけであり、文字列を比較して(元の試行とまったく同じであるかどうかを確認する)だけです。

ここで、Stack Overflowでどちらのアプローチがより効率的で読みやすいかについての議論があります: len(x)betterまたはx NEQ "" CFMLでより良いですか?

それはすべて主観的です...私はエールの方法を好みますが、完全を期すために他のアプローチも指摘したいと思いました。

于 2013-01-16T15:04:50.120 に答える