then no matter how many times you write it, the symbol literal will
reference the same symbol (as long as the literal is the same, of
course). Also, you can assign either a simple string, or a symbol to a
variable, thus reusing it without repeating in the source.
Is there a way to "intern" a string so that it becomes denoted by a
symbol?
Something like:
# This doesn't work as I wrote it, I know
repetitive_message <= "blah blah blah"
puts :repetitive_message
If you use
puts :"blah blah blah"
Ha.. I missed that you could prefix a string with ":" like that.
then no matter how many times you write it, the symbol literal will
reference the same symbol (as long as the literal is the same, of
course). Also, you can assign either a simple string, or a symbol to a
variable, thus reusing it without repeating in the source.
my_str = "some string"
my_sym = :"some symbol"
Right.
If I name the "variable" as "MY_STR" is then officially a "constant" (instead of a variable) right?
(and that would be preferred in this case)
If you wish. Note that you can't create constants from within methods.
Oh... why is that?
I don't know the exact reason. I guess that constants are intended to be
assigned during the initialization phase of an application, while
modules and classes are defined. Methods are primarily used during the
actual normal operation of the program.
If you absolutely need to assign a constant from a method, e.g. because
you define a method for doing some meta-programming magic, and it needs
to create constants too, you can use Module#const_set.