2012-03-31 1 views
1

동적으로 할당 된 두 개의 변수를 평가하려고합니다. 그런 다음 결과에 따라 동적 변수를 지정하려고합니다. 이 코드가 작동하는 위치는 훨씬 더 길지만 코드를 통합하려고합니다. 여기 ColdFusion 루프 중첩 파운드 기호 문제

내가 통합 코드가 무엇을 :

<cfloop list="dog,cat,pig,horse" index="i">  
    <cfif (#trim([i]_FMCTotal)# /2) GT #trim([i]_FMC)#> 
     <cfset #i#colorCode = 'red'> 
    <cfelseif (#trim([i]_FMCTotal)# /1.5) GT #trim([i]_FMC)#> 
     <cfset #i#colorCode = 'yellow'> 
    <cfelse> 
     <cfset #i#colorCode = 'green'> 
    </cfif> 
</cfloop> 
+1

Phil의 답변이 가장 적합합니다. 필자는 CF에서 파운드 기호를 매우 특수하게 사용한다는 것을 지적하고 싶었습니다. 이것은 문자열 보간을위한 것입니다. 그것은 문자열을 가지고 변수 또는 표현식을 중간에 넣고 싶을 때입니다. 이것이 사용되는 두 가지 경우가 있습니다. 먼저 문자열을 만들 때이를 수행 할 수 있습니다 (예 : ). 다른 하나는 출력을 생성 할 때 예를 들어 동생이 방금 # 문구를 엄마에게 말하면서입니다. 실제로 다른 상황에서 파운드 기호를 포함하면 오류가 발생하지는 않지만 아무런 도움이되지 않을 수 있습니다. –

답변

7

유효하지 않은 등 [i]_FMCTotal 당신이 몇 무효 CFML 구조를 가지고 파서를 통해 얻을 것입니다 게시 한 코드의 많은 수 없음 변수 이름. 또한 해시의 사용은 조건문 내에서 필요하지 않으며 해시는 출력에 사용됩니다.

질문에 대한 답변을 얻으려면 evaluate()이지만 더 읽기 쉽고 안전하며 유지 관리가 쉬운 솔루션은 색상 코드에 구조체를 활용하는 것입니다. 당신이 _FMC 변수 당신을 재 작업에 액세스 할 수없는 경우

<cfset colorCodes = {}> 
<!--- presuming ..._FMCTotal and .._FMC are reworked as structs also ---> 
<cfloop list="dog,cat,pig,horse" index="i">  
    <cfif (FMCTotal[i] /2) GT trim(FMC[i])> 
     <cfset colorCode[i] = 'red'> 
    <cfelseif (trim(FMCTotal[i] /1.5) GT trim(FMC[i])> 
     <cfset colorCode[i] = 'yellow'> 
    <cfelse> 
     <cfset colorCode[i] = 'green'> 
    </cfif> 
</cfloop> 

이의 결과는 쉽게 다음 코드

{ // possible result 
    'pig': 'green' 
    , 'cat': 'yellow' 
    , 'dog': 'red' 
    , 'horse': 'green' 
} 

colorCode['dog'] // => 'red' 

의 항목 값에 액세스 할 수있는 데이터 구조 일 것 그 evaluate('#i#_FMCTotal')을 평가할 수 있지만 내 예제처럼 컬렉션을 사용하는 것이 훨씬 깔끔할 것입니다.

+1

Phil과 Mark and Dan에게 감사드립니다. 난 그냥 파운드 기호 결정 (http://www.coldfusionmuse.com/index.cfm/2011/2/10/when.do.i.use.pound.signs)에 의해 Bamboozled을 읽었습니다. 나는 그 의견을 정말로 고맙게 생각한다. – Fergus

+0

Phil, 코드가 작동했습니다. cfelseif 끝 부분에 ")"을 추가해야했습니다. . 너희들 대단히 고마워 ... – Fergus

1

필의 말이 맞다. 구문이 올바르지 않습니다. 당신이 2로 나눈 변수 pig_FmcTotal이 pig_FMC보다 큰 경우를 참조한다

으로 무엇을하려고한다면, 당신은 일을해야 뭔가처럼 :

<cfif val(variables[i & '_FMCTotal'])/2 gt val(variables[i & '_FMC'])> 

나는 있으리라 믿고있어 _FMC는 실제로는 여기에 문자열이지만 변수라면 위의 작은 따옴표를 제거합니다. 괄호 표기법을 사용하고 대괄호 내에서 키 이름을 연결하십시오. 이를 수행하는 다른 방법이 있습니다 (예를 들어 평가).

그것은 같은 일상의 설정에 관해서 :

<cfset variables[i & colorscheme] = 'green'/> 

행운을 빕니다.