Ruby uses a newline as the end of an expression. When ending a line with an operator, open parentheses, comma, etc. the expression will continue.
You can end an expression with a ; (semicolon). Semicolons
are most frequently used with ruby -e.
Ruby does not require any indentation. Typically, ruby programs are indented two spaces.
If you run ruby with warnings enabled and have an indentation mismatch, you will receive a warning.
alias¶ ↑The alias keyword is most frequently used to alias methods.
When aliasing a method, you can use either its name or a symbol:
alias new_name old_name alias :new_name :old_name
For methods, Module#alias_method can
often be used instead of alias.
You can also use alias to alias global variables:
$old = 0 alias $new $old p $new # prints 0
You may use alias in any scope.
undef¶ ↑The undef keyword prevents the current class from responding
to calls to the named methods.
undef my_method
You may use symbols instead of method names:
undef :my_method
You may undef multiple methods:
undef method1, method2
You may use undef in any scope. See also Module#undef_method
defined?¶ ↑defined? is a keyword that returns a string describing its
argument:
p defined?(UNDEFINED_CONSTANT) # prints nil p defined?(RUBY_VERSION) # prints "constant" p defined?(1 + 1) # prints "method"
You don't need to use parenthesis with defined?, but they
are recommended due to the low precedence of defined?.
For example, if you wish to check if an instance variable exists and that the instance variable is zero:
defined? @instance_variable && @instance_variable.zero?
This returns "expression", which is not what you
want if the instance variable is not defined.
@instance_variable = 1 defined?(@instance_variable) && @instance_variable.zero?
Adding parentheses when checking if the instance variable is defined is a
better check. This correctly returns nil when the instance
variable is not defined and false when the instance variable
is not zero.
Using the specific reflection methods such as instance_variable_defined?
for instance variables or const_defined? for constants is less error prone
than using defined?.
defined? handles some regexp global variables specially based
on whether there is an active regexp match and how many capture groups
there are:
/b/ =~ 'a' defined?($~) # => "global-variable" defined?($&) # => nil defined?($`) # => nil defined?($') # => nil defined?($+) # => nil defined?($1) # => nil defined?($2) # => nil /./ =~ 'a' defined?($~) # => "global-variable" defined?($&) # => "global-variable" defined?($`) # => "global-variable" defined?($') # => "global-variable" defined?($+) # => nil defined?($1) # => nil defined?($2) # => nil /(.)/ =~ 'a' defined?($~) # => "global-variable" defined?($&) # => "global-variable" defined?($`) # => "global-variable" defined?($') # => "global-variable" defined?($+) # => "global-variable" defined?($1) # => "global-variable" defined?($2) # => nil
BEGIN and END¶ ↑BEGIN defines a block that is run before any other code in the
current file. It is typically used in one-liners with ruby -e.
Similarly END defines a block that is run after any other
code.
BEGIN must appear at top-level and END will issue
a warning when you use it inside a method.
Here is an example:
BEGIN { count = 0 }
You must use { and } you may not use
do and end.
Here is an example one-liner that adds numbers from standard input or any files in the argument list:
ruby -ne 'BEGIN { count = 0 }; END { puts count }; count += gets.to_i'