Jun 14, 2010

Use JavaScript-like "with" syntax in Ruby

JavaScript has "with" syntax. At first, I write a code without "with".

  1. console.log(Math.cos(1/2)); //=> 0.8775825618903728  
  2. console.log(Math.sqrt(2)); //=> 1.4142135623730951  



Then, I write with "with".

  1. with(Math) {  
  2.   console.log(cos(1/2)); //=> 0.8775825618903728  
  3.   console.log(sqrt(2)); //=> 1.4142135623730951  
  4. }  



On the other hand, Ruby has not "with" syntax.

  1. puts Math.cos(1/2) #=> 1.0  
  2. puts Math.sqrt(2) #=> 1.4142135623731  



Look! I can use "with" in Ruby!

  1. with(Math) {  
  2.   puts cos(1/2) #=> 1.0  
  3.   puts sqrt(2) #=> 1.4142135623731  
  4. }  



To do this, I wrote "with" function.

  1. def with(obj, &block)  
  2.   obj.instance_eval(&block)  
  3. end  



So, I can use "with" syntax.

  1. with(Math) {  
  2.   puts cos(1/2) #=> 1.0  
  3.   puts sqrt(2) #=> 1.4142135623731  
  4. }  



Of course, other type of object is OK. String, Intger and so on.

  1. with("I love Ruby.") {  
  2.   puts reverse #=> .ybuR evol I  
  3.   puts gsub(/Ruby/, "YUI"#=> I love YUI.  
  4. }  


  1. with(1) {  
  2.   puts succ #=> 2  
  3. }  

2 comments:

Anonymous said...

wew, YUI?^^

so good, hehe
santo

Anonymous said...

Any Idea why cos(1/2) delivers different results ?