В какой момент берутся #?
Все #
берутся в момент начала! выполнения кода.
В какой момент берутся select?
Все select
берутся в тот момент, когда они исполняются! Это принципиальное отличие от #
.
В какой момент берутся @?
@
это сахар для select
— аналогично в момент их исполнения.
пример в котором неправильное понимание последовательности приводит к ошибке
Предположим у нас три поля field_1
, field_2
и field_3
. Мы делаем код действия в field_2
:
a1= : set(table: $#ntn; field: 'field_1' = 25; where: 'id' = #id)
a2=: set(table: $#ntn; field: 'field_3' = #field_1; where: 'id' = #id)
Те первым действием он изменяет значение в field_1
, а вторым берет значение из field_1
и ставит его в field_3
.
В результате выполнения этого кода в field_3
будет поставлено значение из field_1
до изменения. Предположим оно там было равно 11
.
Несмотря на то, что мы назначаем 'field_1' = 25
в field_3
будет 11
, тк его значение через #
будет взято до начала исполнения кода действия!
Модифицируем, что бы работало:
a1= : set(table: $#ntn; field: 'field_1' = 25; where: 'id' = #id)
a2=: set(table: $#ntn; field: 'field_3' = $select; where: 'id' = #id)
select: select(table: $#ntn; field: 'field_1'; where: 'id' = #id)
Этот код будет работать, тк вызов select
производится после изменения field_1
.