Feature #8804
Updated by Eregon (Benoit Daloze) almost 5 years ago
How about to introduce ONCE{...} syntax which do block only once and return the first value? - It is similar of BEGIN{} and END{}. - General syntax of /reg/o. ## simulation code ```ruby ONCE_CACHE = {} ONCE_MUTEX = Mutex.new def ONCE(&b) raise unless block_given? ONCE_MUTEX.synchronize{ key = caller(3, 1)[0] if value = ONCE_CACHE[key] value else ONCE_CACHE[key] = yield end } end 3.times{|i| p ONCE{ i #=> every time 0 } } ``` ## ## Note that this code doesn't work if two or more ONCE{} are available in one line.