24.09.2015
Ausdrücke als Standard-Methodenargumente in Ruby
Wenn man einen Ausdruck als Ruby-Standardargument verwendet, wie in
def delay(time=2.minutes.from_now)
... # Dinge, die später erledigt werden müssen
end
fragt man sich vielleicht, wann genau der Ausdruck ausgewertet wird – beim Parsen oder bei der Ausführung. Der Unterschied kann, besonders bei zeitbasierten Ausdrücken, enorm sein! Finden wir es heraus:
puts 'A'
def delay(time=puts('B'))
end
puts 'C'
delay()
Die Ausgabe ist
A
C
B
Es geschieht also zur Ausführungszeit – was ohnehin viel nützlicher ist.