From: Sam Kong Date: 2007-08-17T02:59:59+09:00 Subject: Lazy function definition pattern in Ruby? Hi, Yesterday, I read a blog about lazy function definition pattern in JavaScript at http://peter.michaux.ca/article/3556 . It was interesting and insightful. Write a function foo that returns a Date object that holds the time that foo was first called. var foo = function() { var t = new Date(); foo = function() { return t; }; return foo(); }; In ruby, one would write the following way or something like that if he wants to cache the first value. def foo @t or (@t = Time.new) end But the writer wants to remove the conditional part because it's run every time the function is called. JavaScript allows functions to be redefined very easily. I think ruby allows it but not very easily. I came up with this idea. class Lazy def method_missing *args if args[0] == :foo @t = Time.new class << self def foo @t end end return foo end end end But I believe that ruby gurus will have better ideas. What would be the lazy function definition pattern in ruby? And do you think it's useful? Thanks in advance. Sam