QVINTVS · SCRIBET

Goto in Ruby

…und nein, es geht nicht um #catch und #throw.

(598) [22:45:01 quintus@hades] ~
$ use joke-ruby
ruby 1.9.3p125 (2012-02-16 revision 34643) [x86_64-linux]
(599) [22:45:05 quintus@hades] ~
$ ruby
x = 0
__label__ :foo
puts "In loop here"
x += 1
__goto__ :foo unless x > 5
puts the_answer_to_life_the_universe_and_everything^D
In loop here
In loop here
In loop here
In loop here
In loop here
In loop here
42
(600) [22:46:05 quintus@hades] ~
$ 

Es zeigt sich, dass weder goto ausgestorben ist, sowie dass es zumindest einen Ruby-Entwickler gibt, der ein Fan von Per Anhalter durch die Galaxis ist.

Ich verbürge mich dafür, dass das obige Beispiel self-contained ist. Keine fiesen Tricks. Ich habe auch nicht den Ruby-Quellcode verändert. Nur eine kleine Option beim Kompilieren gesetzt.

(602) [22:48:33 quintus@hades] ~/Downloads/ruby-1.9.3-p125
$ tail -n3 vm_opts.h
#define SUPPORT_JOKE                 1

#endif /* RUBY_VM_OPTS_H */

Quelle: http://patshaughnessy.net/2012/2/29/the-joke-is-on-us-how-ruby-1-9-supports-the-goto-statement, gefunden über RubyInside.

Valete.

PS: In IRB gibt das einen Segfault, daher habe ich hier Rubys Lesemodus vom Standardinput verwendet.