Hacker Newsnew | past | comments | ask | show | jobs | submitlogin

Sure, and here's the issue:

At the point you do

    plate.dirty

plate === "ryansPlate"

In CoffeeScript the construct for foo of bar

Iterates through the KEYS of bar in turn, assigning them to foo...NOT the values

To be more specific, it iterates through PROPERTY NAMES.

Per the JS spec, property names are always strings (you can't use objects...but you know this I'm just being thorough.)

In your example, you do

   plate.dirty
At this point, plate is equal to "ryansPlate" on the first iteration, "yourPlate" on the second, etc. (well technically the order is undefined, but you get my point)

You want dishes[plate].dirty

To be absolutely clear, I'm don't want to make this out to be anything other than the sort of stupid error all of us make all the time. I'm simply pointing out that I recognize it much quicker because I have a very intuitive understanding of CS at this point. Where you, who are very good at (and used to) JS have a harder time seeing the error.

Likewise, I'm sure that you're aware of the dangers of for-in, I'm simply pointing out that it does no sanity checks so watch out.

Also to be clear, I'm talking about your example as written in the article. Maybe you have some other version that works. Go back to my other comment, I compiled your CS code with the CS compiler. You'll see the error there. If you like I'll make a JSFiddle that demonstrates the problem.

I think you've getting stuck on the fact that in my original criticism I didn't know if dishes was an Array or an Object because it wasn't clear from your code...to be clear it is wrong both ways...so I simply said "it's wrong, something must be changed" apologies if this was ambiguous. Now that you've clarified, it's still wrong...just a particular kind.



I do find it interesting that you didn't go "Oh, if he's got an object, he just missed `key`" so I could argue you likewise not as proficient as you could be :P


We replied simultaneously, view my response above, and yes, I'd also do `for own key, plate` in real code (which I think its really awesome).




Guidelines | FAQ | Lists | API | Security | Legal | Apply to YC | Contact

Search: