Почему команда find должна запускаться с '&'? - PullRequest
0 голосов
/ 17 апреля 2019

Я студент из Китая. Прежде всего, мой английский очень плохой. LOL ~~~ Я очень озадачен некоторым правилом синтаксиса Visualfox Pro.

Есть поле для символов, называемое idв моей таблице выполните команду ниже, чтобы найти запись, идентификатор которой равен A0001:

index on id tag _id
id='A0001'
find &id

& id возвращает имя переменной A0001, я просто хочу узнать, как интерпретатор сравнивает имя переменной с символомполе в таблице ??

Для приведенного выше кода его также можно переписать, как показано ниже:

find A0001

Ответы [ 2 ]

1 голос
/ 17 апреля 2019

Если у вас есть переменная с тем же именем, что и у поля в выбранной в данный момент таблице, содержимое поля будет использовано при обращении к переменной. Вы можете избежать этого, добавив префикс «m». (имеется в виду использование переменной памяти, а не поля). Так что сделайте это:

id = 'A001' && assignment always goes to the variable

SEEK m.id

Один из способов, которым может быть полезен метод &, - это если вы хотите сослаться на одно из нескольких значений:

id1 = 'A001'

id2 = 'B002'

to_find = 'm.id2'

SEEK &to_find && Acts like: SEEK m.id2

0 голосов
/ 17 апреля 2019

Все дело в том, как работают компиляторы и интерпретаторы. Они разделили одни и те же 3 шага:

  • Шаг 1 (называемый лексическим анализом): компилятор разбивает представленный исходный код на значимые элементы, называемые лексемами, и генерирует последовательность токенов из лексем.

  • Шаг 2 (называется синтаксическим анализом): компилятор использует последовательность токенов, сгенерированных во время лексического анализа, для создания древовидной структуры структура данных, называемая абстрактным синтаксическим деревом, AST

  • Шаг 3 (называется семантическим анализом): компилятор использует AST, сгенерированный во время синтаксического анализа, для проверки совместимости программы со всеми правилами исходного языка программирования

Итак, «&» является символом, чтобы они могли распознать его как ПЕРЕМЕННЫЙ, не находя строковое имя «id»

...