[Date Prev][Date Next][Thread Prev][Thread Next]
[Date Index]
[Thread Index]
- Subject: Re: A little bit of golf
- From: Rena <hyperhacker@...>
- Date: Wed, 8 Apr 2015 00:13:17 -0400
On Tue, Apr 7, 2015 at 11:06 PM, Andrew Starks <andrew.starks@trms.com> wrote:
>
>
> On Tuesday, April 7, 2015, Sean Conner <sean@conman.org> wrote:
>>
>> It was thus said that the Great Daurnimator once stated:
>> > On 8 April 2015 at 10:12, Hisham <h@hisham.hm> wrote:
>> > > Ah! NO LPEG ALLOWED! :)
>> >
>> > Why not?
>>
>> Way too easy.
>>
>> lpeg = require "lpeg"
>> id = lpeg.R("AZ","az","09","__")^1 / variables
>> expand_variables = lpeg.Cs((
>> (lpeg.P"${") / "" * id * (lpeg.P"}"/"")
>> + (lpeg.P"$") / "" * id
>> + lpeg.C(lpeg.P(1))
>> )^0)
>>
>> -spc (Could be made even smaller ... )
>>
>>
>
> Right. Too easy and too readable. :)
>
> -Andrew
That's your idea of readable? Yikes.
Maybe not shortest, but somewhat clear solution:
local vars = setmetatable({foo="bar"}, {
__index = function(self, k)
return type(k) == 'string' and rawget(self, k:match('{?([%w_]+)}?'))
end,
})
function expand_variables(str)
return str:gsub('%$(%S+)', vars)
end
--
Sent from my Game Boy.