Question

I want to know more about $: but I don't how is called.

:015 > $:
=> ["/Users/Nerian/.rvm/rubies/ruby-1.9.3-rc1/lib/ruby/site_ruby/1.9.1", 
 "/Users/Nerian/.rvm/rubies/ruby-1.9.3-rc1/lib/ruby/site_ruby/1.9.1/x86_64-darwin11.1.0", 
 "/Users/Nerian/.rvm/rubies/ruby-1.9.3-rc1/lib/ruby/site_ruby", 
 "/Users/Nerian/.rvm/rubies/ruby-1.9.3-rc1/lib/ruby/vendor_ruby/1.9.1", 
 "/Users/Nerian/.rvm/rubies/ruby-1.9.3-rc1/lib/ruby/vendor_ruby/1.9.1/x86_64-darwin11.1.0", 
 "/Users/Nerian/.rvm/rubies/ruby-1.9.3-rc1/lib/ruby/vendor_ruby", 
 "/Users/Nerian/.rvm/rubies/ruby-1.9.3-rc1/lib/ruby/1.9.1", 
 "/Users/Nerian/.rvm/rubies/ruby-1.9.3-rc1/lib/ruby/1.9.1/x86_64-darwin11.1.0"]
  • What is the name of this?
  • How and when is it used?
  • Should it be used at all, is it a good practice or a bad practice?
  • Is it supported by all Ruby implementations?
  • Any docs about it?
Was it helpful?

Solution

  • The canonical (english) name of the $: global is $LOAD_PATH.
  • As the name says, it is an Array of library search paths, i.e. an array of Strings representing all the folders where the interpreter will search libraries in (when it encounters a require "mylibrary" instruction)
  • It can be used with the same caution that has to be paid when dealing with globals. Actually, it is often used when writing test or demo scripts included in gems or libraries, so that the test modifies the load path in order to find the library under test before installing it (e.g. $: << "../lib" assuming the script is in a sibling of lib)
  • It is used by all canonical Ruby versions/implementation. Note though that the current directory . was part of $: on 1.8.x, and has been removed for security reasons on 1.9.x.
  • Docs is available on every Ruby primer (picaxe book, ruby docs site).

OTHER TIPS

Ruby have some PRE-DEFINED VARIABLES

Pre-defined variables
$!         The exception information message set by 'raise'.
$@         Array of backtrace of the last exception thrown.
$&         The string matched by the last successful match.
$`         The string to the left  of the last successful match.
$'         The string to the right of the last successful match.
$+         The highest group matched by the last successful match.
$1         The Nth group of the last successful match. May be > 1.
$~         The information about the last match in the current scope.
$=         The flag for case insensitive, nil by default.
$/         The input record separator, newline by default.
$\         The output record separator for the print and IO#write. Default is nil.
$,         The output field separator for the print and Array#join.
$;         The default separator for String#split.
$.         The current input line number of the last file that was read.
$<         The virtual concatenation file of the files given on command line (or from $stdin if no files were given).
$>         The default output for print, printf. $stdout by default.
$_         The last input line of string by gets or readline.
$0         Contains the name of the script being executed. May be assignable.
$*         Command line arguments given for the script sans args.
$$         The process number of the Ruby running this script.
$?         The status of the last executed child process.
$:         Load path for scripts and binary modules by load or require.
$"         The array contains the module names loaded by require.
$DEBUG     The status of the -d switch.
$FILENAME  Current input file from $<. Same as $<.filename.
$LOAD_PATH The alias to the $:.
$stderr    The current standard error output.
$stdin     The current standard input.
$stdout    The current standard output.
$VERBOSE   The verbose flag, which is set by the -v switch.
$-0        The alias to $/.
$-a        True if option -a is set. Read-only variable.
$-d        The alias to $DEBUG.
$-F        The alias to $;.
$-i        In in-place-edit mode, this variable holds the extension, otherwise nil.
$-I        The alias to $:.
$-l        True if option -l is set. Read-only variable.
$-p        True if option -p is set. Read-only variable.
$-v        The alias to $VERBOSE.
$-w        True if option -w is set.

http://www.zenspider.com/Languages/Ruby/QuickRef.html

It's equivalent to $LOAD_PATH. So I guess you can call it "load path". Google ruby load_path and you should find lots of usefull information.

Personnaly I prefer to read $LOAD_PATH but $: is part of language so I guess it's ok to use it.

Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top