Diverser Syntax
Ausdruck beenden
Ruby verwendet einen Zeilenumbruch als Ende eines Ausdrucks. Wenn eine Zeile mit einem Operator, einer offenen Klammer, einem Komma usw. endet, wird der Ausdruck fortgesetzt.
Sie können einen Ausdruck mit einem ; (Semikolon) beenden. Semikolons werden am häufigsten mit ruby -e verwendet.
Einrückung
Ruby erfordert keine Einrückung. Typischerweise werden Ruby-Programme um zwei Leerzeichen eingerückt.
Wenn Sie Ruby mit aktivierten Warnungen ausführen und eine Einrückungs-Diskrepanz feststellen, erhalten Sie eine Warnung.
alias
Das Schlüsselwort alias wird am häufigsten zum Aliasing von Methoden verwendet. Beim Aliasing einer Methode können Sie entweder deren Namen oder ein Symbol verwenden.
alias new_name old_name alias :new_name :old_name
Für Methoden kann oft Module#alias_method anstelle von alias verwendet werden.
Sie können alias auch zum Aliasing von globalen Variablen verwenden
$old = 0 alias $new $old p $new # prints 0
Sie können alias in jedem Geltungsbereich verwenden.
undef
Das Schlüsselwort undef verhindert, dass die aktuelle Klasse auf Aufrufe der benannten Methoden reagiert.
undef my_method
Sie können Symbole anstelle von Methodennamen verwenden
undef :my_method
Sie können mehrere Methoden undefinieren
undef method1, method2
Sie können undef in jedem Geltungsbereich verwenden. Siehe auch Module#undef_method
defined?
defined? ist ein Schlüsselwort, das einen String zurückgibt, der sein Argument beschreibt
p defined?(UNDEFINED_CONSTANT) # prints nil p defined?(RUBY_VERSION) # prints "constant" p defined?(1 + 1) # prints "method"
Sie müssen keine Klammern bei defined? verwenden, aber sie werden aufgrund der niedrigen Präzedenz von defined? empfohlen.
Wenn Sie beispielsweise prüfen möchten, ob eine Instanzvariable vorhanden ist und ob die Instanzvariable Null ist
defined? @instance_variable && @instance_variable.zero?
Dies gibt "expression" zurück, was nicht das ist, was Sie wollen, wenn die Instanzvariable nicht definiert ist.
@instance_variable = 1 defined?(@instance_variable) && @instance_variable.zero?
Das Hinzufügen von Klammern bei der Prüfung, ob die Instanzvariable definiert ist, ist eine bessere Prüfung. Dies gibt korrekt nil zurück, wenn die Instanzvariable nicht definiert ist, und false, wenn die Instanzvariable nicht Null ist.
Die Verwendung spezifischer Reflexionsmethoden wie instance_variable_defined? für Instanzvariablen oder const_defined? für Konstanten ist weniger fehleranfällig als die Verwendung von defined?.
defined? behandelt einige reguläre globale Variablen speziell, basierend darauf, ob ein aktiver regulärer Ausdruckstreffer vorhanden ist und wie viele Erfassungsgruppen es gibt
/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 und END
BEGIN definiert einen Block, der ausgeführt wird, bevor irgendein anderer Code in der aktuellen Datei ausgeführt wird. Es wird typischerweise in One-Linern mit ruby -e verwendet. Ebenso definiert END einen Block, der ausgeführt wird, nachdem irgendein anderer Code ausgeführt wurde.
BEGIN muss auf oberster Ebene erscheinen und END gibt eine Warnung aus, wenn Sie es innerhalb einer Methode verwenden.
Hier ist ein Beispiel
BEGIN { count = 0 }
Sie müssen { und } verwenden, Sie dürfen nicht do und end verwenden.
Hier ist ein Beispiel für einen One-Liner, der Zahlen aus der Standardeingabe oder beliebigen Dateien in der Argumentenliste addiert
ruby -ne 'BEGIN { count = 0 }; END { puts count }; count += gets.to_i'