Daarjuist een bijzonder vieze bug tegengekomen in ColdFusion. Tenminste, ik vind dat het een bug is.
<cfswitch expression=“#a#”>
<cfcase value=“a”></cfcase>
<cfcase value=“u”><cfset test=1></cfcase>
<cfcase value=“v”><cfset test=2></cfcase>
<cfcase value=“w”><cfset test=3></cfcase>
<cfcase value=“x”><cfset test=4></cfcase>
<cfcase value=“y”><cfset test=5></cfcase>
</cfswitch>
Dat geeft een null pointer exception op de case met “w”. Ook als die verschoven wordt. Oplossing (na drie kwartier zoeken): de eerste case mag niet leeg zijn. Daar moet minstens een commentaar in staan. Zucht.
Reacties
4 reacties op “Daarjuist een bijzonder vieze bug”
komt da ni omdat ‘case’ in bijna elke taal als er een van de cases true is, de volgenden in de lijst ook uitgevoerd worden? daarom moet er in C bv een break gezet worden na elke case entry. zoiets.
och,leukste case/switch statements doe je “The perl way” (een van de mogelijke “perl ways” dan toch …)
Eerst hash maken met functies en dan van :
%FunctieHash = (
a => sub $test=1,
b => sub $test=2,
…
;
if ($FunctieHashlc $case) $FunctieHashlc $case->() # Call function
else warn “Unknown option: `$case’\n”
Perl … you gotta love it ๐
“;” ontbreekt er nog ergens aan ๐
Het heeft niet te maken met een fall-through. Mocht het cfscript> zijn, dan moest er inderdaad overal een break tussen staan, maar niet in gewone cfml.
Bah. Gewoon zo’n inconsistentie van CFMX, gevolg van eigenlijk toch nog altijd een beetje een 1.0-taal te zijn. En van java te zijn natuurlijk.
En perl: There’s more than one way to do it, jaja ๐
Ik kom er toch wel serieus van terug van al die self-obfuscating brol: als ik soms dingen van mij tegenkom van een tijd geleden, is het echt niet geestig om zien. Met commentaar als “it was hard to program so it should be hard to read” en “commentaar is voor homo’s”–op het moment zelf wel geestig, maar achteraf… brrr!