Определить глобальную переменную внутри функции в q kdb - PullRequest
0 голосов
/ 26 сентября 2019

Я вижу два способа определения глобальной переменной из функции в q.

  1. Использование "::"

    q) {gv :: 10}[]
    q) gv / - 10

  2. Использование set

    q) {`gv set 20} []
    q) gv / - 20

Есть ловушка с установленным значением, т.е. если глобальной переменной уже присвоен символ, то значение, назначенное глобальной переменной в функции, присваивается символу, которыйприсваивается глобальной переменной.

q)gv:`t
q){gv set 20}[]
`t
q)gv
`t
q)t
20

Может кто-нибудь объяснить, какой способ (глобальный или заданный как "::") лучше определить в функции и почему он лучше?

1 Ответ

2 голосов
/ 26 сентября 2019

На самом деле «лучшего» не существует - но set имеет преимущество в присвоении имени переменной, которая сама является переменной (как вы показали в своем примере).

Я смущен вашей путаницей в последнем примере, хотя ...... если вы хотите, чтобы 20 был назначен глобалу с именем gv, тогда вы должны поставить галочку перед gv, иначе `gv set 20; и наоборот, если вы хотите, чтобы 20 был назначен символу / имени, содержащемуся в gv, тогда не используйте обратный тик, он же gv set 20;

Последнее замечание: вы также можете создавать глобальные переменные вкорневые каталоги / пространства имен с использованием одного двоеточия

q){.this.that:1;}[]
q)
q).this
    | ::
that| 1
...