itsme213 wrote:
> Ah, I need to think more "functional programming".
>
> Thanks a bunch, all. Useful general lesson for me.
>
> "Martin DeMello" <martindemello / yahoo.com> wrote in message
> news:3BjWe.204172$Hk.56955 / pd7tw1no...
>> itsme213 <itsme213 / hotmail.com> wrote:
>>> I have a hash table HASH containing strings, and want to generate a
>>> string for an equivalent Javascript variable JS from it e.g.
>>>
>>> HASH = {'a' => 'A', 'b' => 'B'}
>>>
>>> "var JS = { 'a' : 'A', 'b' : 'B' }"
>>>
>>> I thought inject was just the ticket:
>>>
>>> 'var JS = {' +
>>>   HASH.inject("") { |str, kv| str << "\n\t'#{kv[0]}' : #{kv[1]}, "
>>>   } + "};"
>>>
>>> But this puts a "," after the last item. Is there a simple
>>> alternative?
>>
>> The simplest is the two-pass
>>
>> 'var JS = {' + HASH.map {|k,v| "'#{k}' : '#{v}'"}.join(",\n\t") +
>> "};"
>>
>> #join has extra logic to specialcase the last element, which is
>> painful with #inject.

Here's a solution with #inject:

>> HASH = {'a' => 'A', 'b' => 'B'}
=> {"a"=>"A", "b"=>"B"}
>> "var JS = {" << HASH.inject("") {|s,(k,v)| s << ", " unless s.empty?; s
<< "'" << k << "' : '" << v << "'"} << "}"
=> "var JS = {'a' : 'A', 'b' : 'B'}"

This is ugly.

    robert