2010-12-17 4 views
0

다음 함수가 태그의 삭제 된 목록을 출력하지만 원래의 목록을 변경하지 않고 출력합니다. 이 이상한 행동이 일어나는 이유이 살균 기능의 출력이 변경되지 않는 이유는 무엇입니까?

<cfset this.tags = "[email protected]%^-tag, anothersf-taggame, SDFSFtagged"> 

<cfset local.listPosition = 0> 

<cfloop list="#this.tags#" index="local.i"> 
    <cfset local.i = ReReplace(local.i, "[^a-z0-9+##\-.]", "", "All")> 
    <cfset local.listPosition = local.listPosition + 1> 
    <cfset ListSetAt(this.tags, local.listPosition, local.i, ", ")> 
</cfloop> 

<cfoutput> 
    #this.tags# 
</cfoutput> 

어떤 생각 : 각 반복에 local.i 덤프, 그러나 하나가 예상하는대로 소독 태그를 보여줍니다? 목록에 새 값을 추가하지 않는 함수가 ListSetAt()이어야하지만 그 이유는 무엇입니까?

답변

6

listSetAt()는 목록을 변경하지 않습니다. 변경 사항이있는 목록의 복사본을 반환하므로 할당을해야합니다.

여기에는 많은 최적화 기능이 사용 된 것처럼 보입니다. 왜 너는 목록을 반복하고 있니? 쉼표를 정규식에서 허용하는 경우,이 루프와 동일한 결과를 얻을 것입니다.

+0

나는 벤에 동의한다. 나는 그것을 완전히 리팩토링했다. 루프에서 regEx를 제거하고 local.listPosition을 제거한 다음 루프 다음에 목록을 설정합니다. 그 표정은 유효성 검증을위한 것입니다. – Mohamad

관련 문제