kdb q: '{ 由于换行而出错?

kdb q: '{ error because of newline?

我是一个 q 新手,正在尝试编写一个 csv 保存函数

CSVsave:{[filename;table]
    filename: $[-11h = type filename;filename;`$":", filename];
    @[hdel;filename;()];
    h: hopen filename;
    (neg h) csv 0: table;
    hclose h;
};

当我将其放入文件 IO.q 并执行

\l IO.q

我收到一条错误消息

k){0N!x y}
'{
@
"q"
"CSVsave:{[filename;table]\n    filename: $[-11h = type filename;filename;`$\..

但是如果我删除新行并将所有内容放在一行中

CSVsave:{[filename;table]     filename: $[-11h = type filename;filename;`$":", filename];    @[hdel;filename;()];    h: hopen filename;    (neg h) csv 0: table;    hclose h;};

运行良好。

我是否漏掉了一些明显的东西?

最后一个括号前的 space。

CSVsave:{[filename;table]
    filename: $[-11h = type filename;filename;`$":", filename];
    @[hdel;filename;()];
    h: hopen filename;
    (neg h) csv 0: table;
    hclose h; };

我还建议尝试使用 kdb IDE。而不是必须不断地节省负载。例如qStudio

任何多行代码都需要在脚本中缩进。大多数人无论如何都会缩进他们的函数体,所以只注意右大括号。如果你有像

这样的脚本
select ...
from ...
where ...

那么以 "from" 和 "where" 开头的行也需要缩进。或者至少我上次尝试过。

另外,非常推荐kdb studio!我无法想象没有它的发展。

几年前,当我刚接触 q 时,我花了一天时间试图找出我做错了什么。答案是您需要 space 在结束花括号之前。它可以独占一行,但前面只需要一个 space。为什么?不知道。就是这样。

CSVsave:{[filename;table]
    filename: $[-11h = type filename;filename;`$":", filename];
    @[hdel;filename;()];
    h: hopen filename;
    (neg h) csv 0: table;
    hclose h;
 };