1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
|
class Object
def self.once(sym)
alias_method sym.to_s + "_orig", sym
define_method sym do |*args|
@values ||= {}
if @values.has_key? sym
return @values[sym]
else
value = self.send("#{sym.to_s}_orig", *args)
@values[sym] = value
return value
end
end
end
end
class Example
def m
rand
end
once :m
def m2(foo)
return "#{foo}"
end
once :m2
end
e = Example.new
e2 = Example.new
puts e.m
puts e2.m
puts e.m
puts e2.m
puts e2.m
puts e2.m
puts e.m2("hej")
puts e2.m2("warez")
puts e.m2("uv")
puts e2.m2("fluff")
|