From: Caleb Tennis Date: 2005-12-31T05:57:14+09:00 Subject: Re: What is the difference between :foo and "foo" ? > When I do the following: > > attr_accessor :foo For me, the colon was the most confusing part. Ignoring the colon, it logically made sense to me that you'd want to do a: attr_accessor foo1, foo2, foo3 Then, you realize "hey, I can't do that, because foo1, foo2, and foo3 represent local variables or methods or some object in the system". Then I pull out my C/C++ hat and say: attr_accessor "foo", "foo2", "foo3" And that makes much more sense, because I have to pass the names somehow to attr_acessor - and it's very common to using strings to do this in the C++ world. Then you learn that every time Ruby sees a string it has to create a new String object, and there's overhead involved. Instead, there's a special class called Symbol which works kind of like a String, at least for these purposes, and once you've ever created one it's always around. Then it isn't profound until you see code like this: 1000.times do some_object.getProperty("name") end and you realize that every time that gets executed a new "name" string has to be created, and that's not so nice. But if you do a: 1000.times do some_object.getProperty(:name) end Wow, that's much more fantastic. And eventually you just "get it".