From: William Djaja Tjokroaminata Date: 2002-04-12T05:36:37+09:00 Subject: How to Make a Method Ineffective Efficiently? Hi, I am having a problem regarding coding efficiency (both for the execution time and for the typing itself). Basically, I have a method that may or may not print depending on a flag, such as .... def print_info (*text) if @debugging .... @file.write (text.join) end end Originally, I have put the flag in the calling class itself, but it made me typing the flag in too many places: .... print_info ("#{obj1} #{obj2} .... #{obj1000}") if @debugging #format A (because in reality the flag or condition may not be that short). Therefore, just like in the first fragment of codes, I have put the flag in the print_info method itself, so that I can simply write .... print_info ("#{obj1} #{obj2} .... #{obj1000}") #format B and whether it actually prints or not is controlled by the flag in the print_info, which I can control without having to type in too many places. However, now I have a problem with execution efficiency. With the last format (format B), whether or not I actually print, the methods to_s of obj1, ..., obj1000 are called. The methods to_s themselves may be very complicated. In the first format (format A), the methods to_s are not called at all if @debugging is equal to false. I don't want to type "if @debugging" everywhere (they clutter the codes), but I also want to have efficient execution, which in this case is equivalent to if @debugging is false, then the print_info method is ineffective, not even the passed arguments. Is there any way I can accomplish what I want easily? (My current solution is to use format B, and try to minimize the argument overhead, by minimizing the number of arguments and doing processing inside the print_info method below the "if @debugging" line as much as possible.) Regards, Bill