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.