From: furtive.clown@... Date: 2007-11-14T05:25:01+09:00 Subject: Re: Yielding an object and caring about the result: the cousin of Object#tap Ara, I have not had such problems with exception traces. Emacs parses the trace, so I've never had a problem tracking exceptions down. You said you disagreed about variable names, but I didn't make an argument about variable names. The argument was about needless temporaries lying around and mucking up at-a-glance comprehension. Those temporaries can be culled away nicely with Object#as. expanded = stems.map { |stem| "#{ stem }.#{ guess_extension stem }" }.as { |guesses| transform2(source_files + transform1(guesses)) }.as { |basenames| basenames.map { |basename| File.join dir, basename } } Of course transform1 and transform2 are bad names --- they are meant to be bad! They are intentionally generic for the purpose of the example. They stand for any function. You gave the Filelist example as the preferred code, which is exactly right. However we are not talking about Filelist, but the *implementation* of Filelist. Could you clarify how the above code lends "strong support to bad programming practices"? That seems unfounded. On the contrary, I find it more appealing at least because (1) the intent of the code --- to produce a value for 'expanded' --- is more obvious; (2) there are no temporaries lying around which may potentially cause confusion in future maintenance; (3) the logic flow is more obvious: three consecutive operations, with the output of one fed into the input of the next. Exceptionally Kind Regards, -FC