문제

이것은 새로운 사람들에게 냉담을 가르치는 데있어 가장 큰 장애물 중 하나였습니다.

#을 사용하는 시점은 기껏해야 모호합니다. 그것들을 사용하는 것은 종종 문제를 일으키지 않기 때문에 대부분의 사람들이 그들을 너무 많이 사용하는 데 끌리는 것 같습니다.

그렇다면 기본 규칙은 무엇입니까?

도움이 되었습니까?

해결책

#을 사용하지 않는 곳을 말하기가 더 쉽다고 생각합니다. 유일한 장소는 CFIF 문에 있으며, CFSET 문은 변수를 사용하여 인용구로 문자열을 작성하지 않는 문자열입니다. 거의 모든 경우에 # 사인을 사용해야합니다.

사용하지 않을 위치의 예 :

<cfset value1 = 5>
<cfset value2 = value1/>

<cfif value1 EQ value2>
    Yay!!!
</cfif>

<cfset value2 = "Four plus one is " & value1/>

#:

in a cfset where the variable is surrounded by quotes
<cfset value1 = 5>
<cfset value2 = "Four plus one is #value1#"/>

the bodies of cfoutput, cfmail, and cffunction (output="yes") tags
<cfoutput>#value2#</cfoutput>
<cfmail to="e@example.com" from="e@example.com" subject="x">#value2#</cfmail>
<cffunction name="func" output="yes">#value2#</cffunction>    

in an attribute value of any coldfusion tag
<cfset dsn = "myDB"/>
<cfquery name="qryUsers" datasource="#dsn#">

<cfset value1 = 5>
<cfset value2 = 10/>
<cfloop from="#value1#" to="#value2#" index="i">

<cfqueryparam value="#value1#" cfsqltype="cf_sql_integer"/>

편집하다:

내가 방금 눈에 띄지 않는 것으로 보인다는 것 중 하나의 작은 작은 것은 조건부 루프가 # 표지판이 있거나없는 가변 이름을 사용할 수있게하는 것입니다.

<cfset value1 = 5>

<cfloop condition = "value1 LTE 10">
    <cfoutput>#value1#</cfoutput><br>
    <cfset value1 += 1>
</cfloop>

<cfset value1 = 5>

<cfloop condition = "#value1# LTE 10">
    <cfoutput>#value1#</cfoutput><br>
    <cfset value1 += 1>
</cfloop>

다른 팁

Adobe가 그것에 대해 말하는 것은 다음과 같습니다.

숫자 표시 사용

문자열 보간 :

<cfset name = "Danny" />
<cfset greeting = "Hello, #name#!" />
<!--- greeting is set to: "Hello, Danny!" --->

자동 에스케이프 문자열 보간 cfquery:

<cfset username = "dannyo'doule" ?>
<cfquery ...>
    select u.[ID]
    from [User] u
    where u.[Username] = '#username#'
</cfquery>
<!--- the query is sent to the server (auto-escaped) as: --->
<!--- select u.[ID] from [User] u where u.[Username] = 'dannyo''doule' --->
<!--- note that the single-quote in the username has been escaped --->
<!--- by cfquery before being sent to the database server --->

CFML에서 복잡한 인수/속성 전달 :

<cfset p = StructNew() />
<cfset p.firstName = "Danny" />
<cfset p.lastName = "Robinson" />
<cfmodule template="modules/view/person.cfm" person="#p#">
<!--- the variable Attributes.person will be --->
<!--- available in modules/view/person.cfm --->

복잡한 논쟁이 필요합니다 # CFScript가 아닌 CFML에서만 서명합니다. 또한 간단한 값, 어레이, 스트러크, CFComponents, Cffinctions, Java Objects, COM 개체 등 모든 종류의 값을 전달할 수 있습니다.

이 모든 경우에, 그 사이의 텍스트 # 표지판 ~ 아니다 have to be the 변수의 이름. 실제로, 그것은 어떤 표현에 의해서도 가능합니다. 물론, 문자열 보간의 경우, 표현식은 간단한 값으로 평가해야하지만 CFML로 전달되는 인수/속성의 경우, 표현식은 복잡한 값으로도 평가 될 수 있습니다.

그만큼 #...# 구문을 사용하면 문자열 문자 내에 표현식을 포함시킬 수 있습니다. Coldfusion은 불행히도 끈이 무엇인지, 표현이 무엇인지에 대해 꽤 일치하지 않습니다. Jayson은 좋은 목록을 제공했습니다 사용 (또는 사용하지 않음) #s.

현명한 귀신처럼 들릴 위험이 있으면 경험의 규칙은 다음과 같습니다. 변수 또는 표현식 주위에 #을 사용하십시오 ~ 아니다 그렇게하는 것은 올바른 결과를 얻지 못합니다. 또는 : 필요하지 않은 경우 사용하지 마십시오.

나는 Jayson의 대답을 좋아합니다.

cfoutput 태그에 대해 이야기하지 않는다고 가정하여 시작하겠습니다. 원인이 된 경우, 대답은 항상 코드의 다른 곳에 있습니다. 인용 표시 안에있는 경우 실제로 진행중인 값을 입력 할 수있는 경우 # 기호를 사용해야합니다. 사용하려면 ... CFLOOP 태그를 설정하는 경우 'to'속성을 설정하는 경우 6을 쉽게 입력 할 수 있지만 변수를 사용하려면 # 기호를 사용해야합니다. 이제 CFLOOP 태그 설정에 쿼리 매개 변수를 설정하는 경우 실제로 해당 속성에 쿼리를 입력 할 수있는 방법이 없으므로 쿼리를 입력 할 수있는 방법이 없으므로 # 기호가 필요하지 않습니다.

CFDUMP 태그와 마찬가지로 정적 텍스트를 덤프 할 수 있으므로 변수의 내용을 덤프하려면 # 기호를 사용해야합니다. 이 문제는 일반적으로 자기 교정이지만, 나는 당신의 고통을 느낍니다. 학생들은 아마도 "항상 그들을 사용하지 않는다"또는 "절대 사용하지 않는다"는 접근 방식이 없다는 것에 좌절 할 것입니다 ... 슬프게도 이것이 사실이 아닙니다. 사실입니다. 인용 마크의 내부가 정확한 한 가지 방법 일뿐입니다. 그래서 그것이 작동하지 않는다면 그것을 열심히 길고 길게보고 자신을 생각하십시오. "해당 변수에 포함 된 값을 사용하는 대신 그 가치를 입력 할 수 있습니까?" 대답이 아니오 인 경우 # 기호가 필요하지 않습니다. 그렇지 않으면 # 문자 foo를 켜십시오.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top