document.write('<link rel="stylesheet" href="http://flowcoder.com/stylesheets/pygment_trac.css" />');
document.write('<link rel="stylesheet" href="http://flowcoder.com/stylesheets/embed.css" />');
document.write('<div class="flowcoder_post flowcoder_clearfix">');
document.write('<div class="flowcoder_posttitle"><a href=\"http://flowcoder.com/172\">Run Once Proc<\/a></div>');
document.write('<div class="flowcoder_postbody flowcoder_syntax"><div class=\"highlight\"><pre><span class=\"k\">class<\/span> <span class=\"nc\">RunOnceProc<\/span> <span class=\"o\">&lt;<\/span> <span class=\"no\">Proc<\/span>\n  <span class=\"k\">class<\/span> <span class=\"nc\">MultipleCallAttempt<\/span> <span class=\"o\">&lt;<\/span> <span class=\"no\">StandardError<\/span><span class=\"p\">;<\/span> <span class=\"k\">end<\/span>\n  \n  <span class=\"k\">def<\/span> <span class=\"nf\">call<\/span><span class=\"p\">(<\/span><span class=\"o\">*<\/span><span class=\"n\">args<\/span><span class=\"p\">)<\/span>\n    <span class=\"k\">raise<\/span><span class=\"p\">(<\/span><span class=\"no\">MultipleCallAttempt<\/span><span class=\"p\">,<\/span> <span class=\"s2\">&quot;You cannot call this proc more than once&quot;<\/span><span class=\"p\">)<\/span> <span class=\"k\">if<\/span> <span class=\"n\">called?<\/span>\n    <span class=\"vi\">@_called<\/span> <span class=\"o\">=<\/span> <span class=\"kp\">true<\/span>\n    <span class=\"k\">super<\/span>\n  <span class=\"k\">end<\/span>\n  \n  <span class=\"k\">def<\/span> <span class=\"nf\">called?<\/span>\n    <span class=\"o\">!!<\/span><span class=\"vi\">@_called<\/span>\n  <span class=\"k\">end<\/span>\n  \n<span class=\"k\">end<\/span>\n\n<span class=\"nb\">p<\/span> <span class=\"o\">=<\/span> <span class=\"no\">RunOnceProc<\/span><span class=\"o\">.<\/span><span class=\"n\">new<\/span> <span class=\"p\">{<\/span><span class=\"o\">|<\/span><span class=\"nb\">name<\/span><span class=\"o\">|<\/span> <span class=\"nb\">puts<\/span> <span class=\"s2\">&quot;hi <\/span><span class=\"si\">#{<\/span><span class=\"nb\">name<\/span><span class=\"si\">}<\/span><span class=\"s2\">&quot;<\/span><span class=\"p\">}<\/span>\n\n<span class=\"nb\">p<\/span><span class=\"o\">.<\/span><span class=\"n\">call<\/span><span class=\"p\">(<\/span><span class=\"s2\">&quot;John&quot;<\/span><span class=\"p\">)<\/span>  <span class=\"c1\"># =&gt; hi John<\/span>\n<span class=\"nb\">p<\/span><span class=\"o\">.<\/span><span class=\"n\">call<\/span><span class=\"p\">(<\/span><span class=\"s2\">&quot;Paul&quot;<\/span><span class=\"p\">)<\/span>  <span class=\"c1\"># =&gt; RunOnceProc:: MultipleCallAttempt: You cannot call this proc more than once<\/span>\n<\/pre><\/div>\n</div>');
document.write('<div class="flowcoder_bottombar flowcoder_clearfix">');
document.write('<div class="flowcoder_postedby">Posted by <a href=\"http://flowcoder.com/gbuesing\">gbuesing<\/a> on <a href=\"http://flowcoder.com/\">Flowcoder<\/a></div>');
document.write('<div class="flowcoder_viewraw"><a href=\"http://flowcoder.com/172.txt\">view raw<\/a></div>');
document.write('</div></div>');
