On Tue, Jul 23, 2024, at 4:00 PM, Matthew Weier O'Phinney wrote:
>> However, a few people indicated a desire to have an explicit wildcard _
>> anyway, even if it's redundant, as it's a more common and standard approach
>> in other languages. We've indicated that we are open to making that an
>> optional secondary vote in the pattern matching RFC if there's enough
>> interest (it would be trivial), though I haven't bothered to add it to the
>> RFC text yet.
>>
>> Having _ available could also be used in other "wildcard" or "ignore this"
>> cases, like exploding into a list assignment or similar, though I don't
>> believe that has been fully explored.
>
> Can you provide examples of what that usage would look like? And the
> question I have really is, does this actually _require_ using "_", or
> could another token be used for such matches?
Hypothetical pattern matching example:
$foo is ['a' => int, 'b' => $b, 'c' => mixed];
That would assert that there's 3 keys. "a" may be any integer (but only an
integer), "b" can be anything and will be captured to a variable, and "c" must
be defined but we don't care what it is.
The suggestion is to basically alias _ to "mixed" for pattern purposes:
$foo is ['a' => int, 'b' => $b, 'c' => _];
As "there's a var here but I don't care what it is, ignore it" is a common
meaning of _ in other languages. But that would need to be disambiguated from
a pattern saying "c must be an instance of the class _". Technically any
symbol/set of symbols could be used there (as it's just an alias to mixed,
which has the exact same effect), but _ is a common choice in other languages.
In theory, that could be expanded in the future to something like (note: this
hasn't been seriously discussed that I know of, I'm just spitballing randomly):
[$a, $b, _] = explode(':', 'foo:bar:baz');
To assign $a = "foo", $b to "bar", and just ignore "baz". Which might cause
parser issues if _ is a legal class name, I'm not sure. There's probably other
"ignore this" cases we could come up with, but I haven't actually thought about
it.
Again, whether any of the above is a compelling argument or not I leave as an
exercise for the reader.
--Larry Garfield