Hey Chris,

Thanks for bringing that up! Before submitting this, I actually had the syntax for multiple matches for one arm being separated by or. And frankly I just didn't like how that looked for more than 3 items:

'1' or '2' or '3' or '4' or '5' vs  '1', '2', '3', '4', '5'

But you're right. The syntax should be for tuples instead.


Here's my revised syntax, using a guard instead for the moment:

def convert_time_to_timedelta_with_match(unit:str, amount:int, now:date):
 
return match unit:
     
x if x in ('days', 'hours', 'weeks') => timedelta(**{unit: amount})
     'months' => timedelta(days=30 * amount)
     
'years' => timedelta(days=365 * amount)
     
'cal_years' => now - now.replace(year=now.year - amount)



On Thursday, May 3, 2018 at 2:54:24 PM UTC-4, Chris Angelico wrote:
On Fri, May 4, 2018 at 4:36 AM, Robert Roskam <raider...@gmail.com> wrote:
> Hey Chris,
>
> So I started extremely generally with my syntax, but it seems like I should
> provide a lot more examples of real use. Examples are hard. Here's my
> hastily put together example from an existing piece of production code:
>
>
> # New Syntax for same problem
>
>
> def convert_time_to_timedelta_with_match(unit:str, amount:int, now:date):
>  return match unit:
>      'days', 'hours', 'weeks' => timedelta(**{unit: amount})
>      'months' => timedelta(days=30 * amount)
>      'years' => timedelta(days=365 * amount)
>      'cal_years' => now - now.replace(year=now.year - amount)

Okay, here we may have a problem. You're expecting a comma separated
set of values to indicate "any of these", but elsewhere, pattern
matching against a list of values is making an assertion about a
tuple. So if you have any pattern matching that isn't based on
equality, you're going to need to clearly stipulate how your syntax
works.

If you are NOT going to support tuple pattern matching (but only
dict), you'll need to make this VERY clear, because people are going
to expect it.

ChrisA
_______________________________________________
Python-ideas mailing list
Python...@python.org
https://mail.python.org/mailman/listinfo/python-ideas
Code of Conduct: http://python.org/psf/codeofconduct/