From: Conrad Schneiker Date: 2000-07-11T02:07:26-05:00 Subject: [ruby-talk:03924] Re: A question about variable names... Hi, Dave Thomas wrote: > The rules for name construction seem to be that the first character > (which determines the name's usage) should be an upper or lowercase > letter, a dollar sign or an at sign. The remainder of the name is > drawn from [a-zA-Z0-9_]. > > So, this means that $3 and @27 and valid names for a global and > instance variable respectively. > > class Dave > def initialize > puts n > @23 = "hello" > end > def get > @23 > end > end > > However, I cannot create a symbol corresponding to the instance > variable "23" - :23 is invalid syntax. > > Then... If I create an attribute for my instance variable using > > attr "23" > > I can't use it: > > Dave.new.23 > > is parsed as passing the argument '0.23' to Dave.new. > > So... I'm wondering if allowing a digit as the first character after > the @ in an instance variable name is a good idea? > > What does the panel think? I suspect the least surprise panel is inclined to rule against it, for the above reason in conjunction with the following additional reasons. It goes against what is reasonably common (and a reasonable) practice in other languages without any strong offsetting reason. In this context (to elaborate on Hal's comment), I think most people will naturally tend to tacitly regard @ as a scope type prefix tag on a "conventional" variable name even though they know it is officially part of the variable name. $ variables are already (loosely speaking) special/predefined variables in a number of languages (including Ruby) that (loosely speaking) function as array element aliases. Allowing @ variables (which are never special) treats 9, $9, and @9 even more non-uniformly _overall_ , because it is the addition yet another exception, but an exception with a different _typical_ role/meaning than the first exception. So I just have to say nine.german_to_english to this! :-) -- Conrad Schneiker (This note is unofficial and subject to improvement without notice.)