On Fri, Mar 25, 2011 at 4:42 PM, Iain Barnett <iainspeed / gmail.com> wrote:
>
> On 25 Mar 2011, at 14:32, Colin Bartlett wrote:
>
>> On Fri, Mar 25, 2011 at 7:52 AM, Robert Klemme
>> <shortcutter / googlemail.com> wrote:
>>> What about
>>> ...
>>> res = [1]
>>> [a,b,c].each {|x| x and res.concat x}
>>
>> I'd also wondered whether Iain Barnett really needed array + array2
>> rather than array.concat(array2), and wondered about something
>> similar:
>>
>> class Array
>>  ¨Âåæ ãïîãáôßîïôßîéìªáòç>>  ¨Âòçó®åáãè üáòçãïîãáô¨áòçõîìåóó áòç®îéì¿ >>  ¨Âåì>>  ¨Âîä
>>  ¨Âåæ ðìõóßîïôßîéìªáòç>>  ¨Âå÷ßáòù óåìæ®äõð
>>  ¨Âå÷ßáòù®ãïîãáôßîïôßîéì¨ ªáòç©£
>>  ¨Âîä
>> end
>>
>
> I really appreciate the responses, but if I apply them to the code that provoked the question for me, and my dislike of wrapping things in an array only to get access to a function or block (which also then removes the wrapper), and of creating locals for a single use, then I'm not so sure they work.

Maybe you should reduce your requirements...

> As in, there are so many great shortcuts in Ruby that feel very natural too, that some kind of infix operator works well for args split over severalines due to their length.
>
> I think this reads very easily, HEADERS is 3 env vars added up into one:
>
>  ¨ÂÅÁÄÅÒÓ ÅÎÖÛ¢ÂÌÁÈßÂÌÁÈ¢Ý >  ¨ÂÎÖÛ¢ÂÌÁÈßÂÌÁÈßÂÌÁÈ¢Ý 
>  ¨ÂÎÖÛ¢ÂÌÁÈßÂÌÁÈßÂÌÁÈßÂÌÁÈ¢>
> to this, which creates an array then destroys it, which kind of masks thentention:
>
>  ¨ÂÅÁÄÅÒÓ >  ¨ÂÎÖÛ¢ÂÌÁÈßÂÌÁȢݬ
>  ¨ÂÎÖÛ¢ÂÌÁÈßÂÌÁÈßÂÌÁÈ¢Ý>  ¨ÂÎÖÛ¢ÂÌÁÈßÂÌÁÈßÂÌÁÈßÂÌÁÈ¢>  ¨Â®éîêåãô¨Û±Ý© ûüò¬øü áîò®ãïîãáô¨øïò òý
>
> If I was going to use a fold or something similar then I would probably have done something like this, or used a ternary operator in a fold, (knowing the way I think):
>
>  ¨ÂÅÁÄÅÒÓ >  ¨ÂÎÖÛ¢ÂÌÁÈßÂÌÁȢݬ
>  ¨ÂÎÖÛ¢ÂÌÁÈßÂÌÁÈßÂÌÁÈ¢Ý>  ¨ÂÎÖÛ¢ÂÌÁÈßÂÌÁÈßÂÌÁÈßÂÌÁÈ¢>  ¨Â®òåêåãôûüøø®îéì¿ ý®òåäõã娺«©
>
> but compared to this it seems a bit creaky:
>
>  ¨ÂÅÁÄÅÒÓ ÅÎÖÛ¢ÂÌÁÈßÂÌÁÈ¢Ý «¿
>  ¨ÂÎÖÛ¢ÂÌÁÈßÂÌÁÈßÂÌÁÈ¢Ý >  ¨ÂÎÖÛ¢ÂÌÁÈßÂÌÁÈßÂÌÁÈßÂÌÁÈ¢>
> Is there a way to define infix operators in Ruby, as I quite like this one? :)

There is no way to define new operators other than hacking the
interpreter.  IMHO it's a bad idea to do this just for a minor
nuisance.

> Actually, looking at the code they'd be ENV["BLAH_BLAH"].split(":") as they were PATHs, but I'm not sure the inclusion adds anything to the examples.

I don't understand what's wrong with

HEADERS = []
%w{BLAH BLAH_BLAH BLAHHH}.each do |var|
  x = ENV[var] and HEADERS.concat(x.split(/:+/))
end

Nice short concise and yet readable.

Cheers

robert

-- 
remember.guy do |as, often| as.you_can - without end
http://blog.rubybestpractices.com/