Почему предложение » С » должно напоминать о переменной в Cypher?

#variables #cypher #with-statement

Вопрос:

Скажем, в group собственности у меня есть ценности cat dog и chicken egg . Я хочу присвоить свойству gid начальные символы значений в group , т. е. cd и ce . Это мой вопрос:

 match (n) 
with split(n.group," ") as array 
set n.gid=left(array[0],1) left(array[1],1) 
return n.name, n.gid;
 

Я получаю эту ошибку:

 Variable `n` not defined (line 2, column 48 (offset: 48))
"match (n) with split(n.group," ") as array set n.gid=left(array[0],1) left(array[1],1) return n.name, n.gid;"
                                                ^
 

Однако это работает:

 match (n) 
with n, split(n.group," ") as array 
set n.gid=left(array[0],1) left(array[1],1) 
return n.name, n.gid;
 

Я не понимаю, почему это так? Я проверяю WITH документацию, но не вижу никаких проблем?

Ответ №1:

Из самого документа С документами

Важно отметить, что С влияет на переменные в области видимости. Любые переменные, не включенные в предложение WITH, не переносятся на остальную часть запроса.

В первом запросе,

 match (n) 
with split(n.group," ") as array 
...
 

только array переносится на остальную часть запроса, n забывается., вот почему вы получаете ошибку.

Комментарии:

1. Я понимаю. Но если предположить, что он переносит переменные вперед, что может пойти не так?

2. Внутренне механизм выполнения шифра экономит память при хранении этих переменных. С некоторыми переменными может быть связано много данных. Кроме того, я полагаю, что это сэкономило бы некоторое время на обработку.