Project

General

Profile

Feature #18690

Updated by sawa (Tsuyoshi Sawada) almost 2 years ago

`Kernel#then` passes the receiver to the block as its first positional block parameter. argument. 

 ```ruby 
 1.5.then{|x| Math.atan(x)} 
 ``` 

 I would like to propose to let `then` take arguments, which would be passed to the block as the other block parameters. arguments. 

 ```ruby 
 3.then(4){|x, y| Math.hypot(x, y)} 
 ``` 

 There are two uses. First, to separate bulky or repeated parameters from the routine. Instead of writing: 

 ```ruby 
 honyarara.then{|x| 
   foo(x) 
   bar(fugafugafuga) 
   baz(hogehogehoge) 
   qux(x, fugafugafuga, hogehogehoge) 
 } 
 ``` 

 we can then write: 

 ```ruby 
 honyarara.then(fugafugafuga, hogehogehoge){|x, y, z| 
   foo(x) 
   bar(y) 
   baz(x) 
   qux(x, y, z) 
 } 
 ``` 

 Second, to use a proc with multiple parameters when, for some reason, you do not want to define a method to do it: 


 ```ruby 
 p = ->(x, y, z){ 
   foo(x) 
   bar(y) 
   baz(x) 
   qux(x, y, z) 
 } 

 honyarara.then(fugafugafuga, hogehogehoge, &p) 
 ``` 

Back