есть ли способ сделать это без сплата, чтобы он был менее запутанным?
Поскольку a,b = [c,d]
- это то же самое, что и a,b = *[c,d]
, и сплат вызывает to_a
для своего операнда, когда это не массив, вы можете просто явно вызвать to_a и не нуждаться в сплате:
match, text, number = "foobar 123".match(/([A-z]*) ([0-9]*)/).to_a
Не знаю, менее ли это сбивает с толку, но без блефа.