>
>
> class MatchType(type):
> def __eq__(self, other):
> return self == type(other)
>
> Or I even want to match:
>
> type[int], y < 42, z = vec
>
> Well, I can’t think of a language where you can actually match that way.
> That doesn’t necessarily mean we should disallow it, but I can’t imagine
> how the compiler and interpreter are supposed to figure this out.
>
Actually, you've given the solution already:
class MatchLT:
def __eq__(self, other):
return self < other
MatchType(int), MatchLT(42), z = vec
> MatchType(int), MatchFunc(lambda y: y<42) as y, z = vec
>
Or yeah... to be generic about predicate, that's it.
The very ancient library PEAK in Python did multiple dispatch on a
predicative basis, which amounts to pattern matching. For example, from a
very old article I wrote on this:
import dispatch
@dispatch.generic()
def doIt(foo, other):
"Base generic function of 'doIt()'"
@doIt.when("isinstance(foo,int) and isinstance(other,str)")
def doIt(foo, other):
print "foo is an unrestricted int |", foo, other
@doIt.when("isinstance(foo,str) and isinstance(other,int)")
def doIt(foo, other):
print "foo is str, other an int |", foo, other
@doIt.when("isinstance(foo,int) and 3<=foo<=17 and isinstance(other,str)")
def doIt(foo, other):
print "foo is between 3 and 17 |", foo, other
@doIt.when("isinstance(foo,int) and 0<=foo<=1000 and isinstance(other,str)")
def doIt(foo, other):
print "foo is between 0 and 1000 |", foo, other
doIt( 1, 'this') # -> foo is between 0 and 1000 | 1 this
doIt('x', 1234) # -> foo is str, other an int | x 1234
doIt(10, 'this') # -> foo is between 3 and 17 | 10 this
doIt(20, 'this') # -> foo is between 0 and 1000 | 20 this
doIt(-7, 'this') # -> foo is an unrestricted int | -7 this
try: doIt(2222, 66)
except dispatch.interfaces.NoApplicableMethods:
print "No Applicable Methods" # -> No Applicable Methods
(http://gnosis.cx/publish/programming/charming_python_b22.html)
--
Keeping medicines from the bloodstreams of the sick; food
from the bellies of the hungry; books from the hands of the
uneducated; technology from the underdeveloped; and putting
advocates of freedom in prisons. Intellectual property is
to the 21st century what the slave trade was to the 16th.
_______________________________________________
Python-ideas mailing list -- [email protected]
To unsubscribe send an email to [email protected]
https://mail.python.org/mailman3/lists/python-ideas.python.org/
Message archived at
https://mail.python.org/archives/list/[email protected]/message/HUO7MLATR2A32PUJG2KDJ3V44DO662OV/
Code of Conduct: http://python.org/psf/codeofconduct/