lua-users home
lua-l archive

Re: [ANN] tamale-1.2 - Erlang-style pattern matching library

[Date Prev][Date Next][Thread Prev][Thread Next] [Date Index] [Thread Index]


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

AltStyle によって変換されたページ (->オリジナル) /