[Date Prev][Date Next][Thread Prev][Thread Next]
[Date Index]
[Thread Index]
- Subject: Re: [ANN] tamale-1.2 - Erlang-style pattern matching library
- From: Javier Guerra Giraldez <javier@...>
- Date: Fri, 24 Sep 2010 09:14:51 -0500
On Fri, Sep 24, 2010 at 8:50 AM, Scott Vokes <vokes.s@gmail.com> wrote:
> I'm not set on testing strings with :match rather than just ==,
> either. Perhaps it could be activated by an optional optional
> match=true flag on the pattern row, like { "foo %d+", handle_num,
> match=true } ? For now, it checks strings for magic characters and
> only uses :match on string patterns when they are present (which makes
> a big difference timewise). (Steve Donovan and I debated the pros and
> cons of this, too.)
my 2 cents (with 30% discount for not having read the source!): don't
scan the string either, use closures:
instead of: "xxx" is a constant, and "xx%d" is a match pattern, do:
"xxx" is a constant and tamale.M("xx%d") is a match predicate (a
closure that takes the target element and returns true or false).
something like this:
function tamale.M(p)
return function(s)
return p:match(s)
end
end
and in the matching core:
local t = type(pat_element)
if t== 'string' then
m = (targ_element==pat_element)
elseif t == 'function' then
m = pat_element(targ_element)
elseif t == 'table' then
.......
end
(again, i haven't read the source, but i guess somewhere it's checking
the type of the pattern elements to switch between matching
strategies)
a big advantage of this is that you could use different matching predicates
--
Javier