Привет @voidwkr: Я считаю, что мы решили сделать это незаконно в Часовне консервативно, опасаясь, что если кто-то не поймет, что выражение левой стороны является кортежем, оно может застать их врасплох. Кроме того, потенциально существует небольшой вопрос относительно того, что следует делать в случае гетерогенного кортежа с левой стороны.
Тем не менее, я также думаю, что есть аргумент в поддержку такой присваивания, заданные другими кортежно-скалярными комбинациями, которые поддерживает Chapel, как вы заметили (не говоря уже о массиве <-скалярных присваиваний). </p>
Если вы сомневаетесь в подобных вопросах, мы часто пытаемся придерживаться консервативного подхода, потому что тогда если позже мы решим, что мы не правы, мы реже сломаем существующий код. Если вы считаете, что мы сделали неправильный выбор, я бы рекомендовал вам открыть запрос на функцию на странице проблем GitHub в Chapel, указав свой аргумент: https://github.com/chapel-lang/chapel/issues
Как вы заметили, Одним из способов поддержки таких назначений было бы предоставить собственную перегрузку =
для обработки этого случая следующим образом ( TIO ):
var t = (1.0, 2.0); // type = (real,real) or 2*real
t = 0.0;
writeln(t);
proc =(ref lhs: 2*real, rhs: real) {
for l in lhs do
l = rhs;
}