больше двух говорят вслух о чем речь?))
так всё о том же :):) есть в спецификации упоминание, что let a = 1, b = a*2 in b это синтаксический сахар выражения [a=1, b=a*2][b] ну вот я решил пофлудить ещё раз на эту тему :)
почему имя поля 2?
ниже пояса, так не честно )))
Я не специально. Но думаю, что одно другому не противоречит. Выражение после in оценивается в имеющемся scope. Имена между let и in добавляются к внешнему scope. Непонятно только, происходит ли преобразование let .. in в запись в бэкграунде. Думаю, нет.
ну ключевое - мы после in имеем право написать выражение, а в записи выражение можно поместить только в поле
ну вариант ))) [#""=2][#""]
хотя вообще, глобально, в let in 2 переменные не объявлены, т.е. это просто выражение 2, предполагаю, что при оценке там должно быть [ ] и собственно поле с результатом, которое допускается писать после in просто выражением предлагаю считать это полем с именем null как в сообщении выше))) (особенно с учётом того, что в let in подобное имя недопустимо)
Ну, пусть так. Хотя что null, что любое другое техническое имя поля мне представляется избыточным. Но если это стойнит картину syntax sugar, пусть будет. Хотя моя идея со scope выглядит не менее стройно, особенно когда вспоминаем, что для оценки запроса нам нужно список имён между let in добавить к #shared. Вот и получаем, что для оценки выражения let in 2 мы должны сделать #shared & [ ] Вот тогда и синтаксический сахар для записи (имена между let in), и иносказательное обращение к полю (оценка выражения после in) - всё на месте
null - не любое, это считай отсутствие, а стройнит, поскольку сами разрабы написали, что сахар для записи, с безымянным именем оно сходится )))
[a=...,b=...,c=...] вычисляется целиком [a=...,b=...,c=...][b] вычисляется лениво
Что значит целиком? Жадно? Но разве значения полей в первом варианте не вычисляются лениво? Тогда жадно вычисляется только каркас записи, если можно так сказать.
А я всегда понимал так, что если к полям записи обращения нет, то она и вообще не вычисляется, ибо анафига?
насколько помню, ощутимая разница между записью и let in проявляется в обработке ошибок.
Вспомнил с чем перепутал. Аргументы функции сразу вычисляются, даже если там нафиг не нужны. Так заставлял кэшировать ответ сервера до проверки его статуса в метаданных, чтобы повторный запрос не улетал
Это значит, что если на выход подать запись, будут вычислены все поля, я только это имел ввиду
Если запись является РЕЗУЛЬТАТОМ - то вычисляются, если это промежуточное вычисление - то по общим правилам ленивых. Я же написал выражение целиком, откуда появилась мысль, что это кусок чего-то большего?
Ну ты же понимаешь, что в отсутствие клиентских средств получения записи как результата трудно представить себе финальный результат запроса как запись. В том числе потому, что нет средств тестирования, ибо мы увидим таблицу 1х1 с записью в ячейке, а это уже не то же самое.
во, нашел, здесь и ниже кучка сообщений https://t.me/PQ_ru/6589
Нет, мы получим ТАБЛИЦУ с полями Name и Value
да, я погорячился. Но тем не менее, получим не запись же.
Обсуждают сегодня