什么时候不在ColdFusion中使用hash#符号?

vol*_*one 4 coldfusion cfml

#在我的应用程序中使用了每个动态值周围的符号,并在此处发布了我的一些代码以获得帮助后,我被告知不需要#在很多地方使用例如<cfif>语句.

所以我开始删除#符号,直到我意识到我打破了我的应用程序,因为我从标签的value=""属性中删除了#符号<cfprocparam>.

我很困惑:

  1. 为什么使用#符号是某些地方而不是其他地方(不使用它的好处是什么?)
  2. 为什么如果他们不需要<cfif><cfargument>标签突然需要<cfprocparam>标签?
  3. 由于缺乏一致性,首先在每个动态值周围包围哈希值是不是更好?

Ada*_*ron 6

没有不一致(或者很少:你所引用的不一致都是不一致的),只是你不理解规则(这些规则非常基本).一切都在文档中:" 使用数字符号 "

简而言之,在CFML语句中,所有元素都被认为是CFML,因此不需要特别标记它们.例如:

<cfset myVar = someFunction(anArgument)>
Run Code Online (Sandbox Code Playgroud)

没有歧义那里myVar,someFunctionanArgument比CFML以外的任何构造,所以没有必要做这样的事情:

<cfset myVar = #someFunction(anArgument)#>
Run Code Online (Sandbox Code Playgroud)

有些人倾向于这样做.

在文本的中间或字符串中,对于什么是文本以及什么是CFML存在歧义,因此需要使用井号来标记它们.例如:

<cfset myVar = "The time is #now()#">
Run Code Online (Sandbox Code Playgroud)

我们必须在那里使用pound-signs来消除歧义,now()因为它是一个CFML语句,不仅仅是字符串的一部分,例如:

<cfset myVar = "CFML has a function now() which returns the current timestamp">
Run Code Online (Sandbox Code Playgroud)

相等:

<cfquery>
    SELECT col1
    FROM table2
    WHERE col2 = #someValue#
</cfquery>
Run Code Online (Sandbox Code Playgroud)

someValue没有标记它的情况下,将无法知道变量.

基本上就是这样.这并不复杂.