如何在 DolphinDB 中使用元编程重写脚本?

问题描述 投票:0回答:1
st = take(`a, 7) join take(`b, 6)
date = 2023.08.01 + 0 1 3 6 7 8 9 0 1 2 3 8 9
val = 35 34 35.79 33.26 32.88 33.73 31 25 24 22 25.79 21 31
t = table(st, date, val)
marketDay = 2023.08.01 + 0 1 2 3 6 7 8 9
re = select last(val) from t group by st, interval(date, 1d, 0) as date

我想使用元编程生成

select last(val) from t group by st, interval(date, 1d, 0) as date
。但是,第二个分组条件
interval(date, 1d, 0)
不是一元函数,因此
sqlCol
函数不能用于生成元表达式。

metaprogramming dolphindb
1个回答
0
投票

一般来说,当变量或函数作为某些函数的内部对象,只能在这些函数执行后才能注册或取消定义,并可能在后续代码中引用时,可以使用

go
语句,例如使用
share
函数注册的共享表、使用
runScript
函数注册的对象以及使用
undef
函数未定义的变量。

在大多数情况下,函数将脚本或对象作为字符串传递。脚本或对象中定义的变量或函数只有在执行后才能注册。例如,在脚本

share(t, st)
中,参数st作为字符串传递,并在后续代码中引用。如果没有
go
语句,则会发生错误,因为执行前尚未生成对象“st”。该脚本可以重写为
share t as st
。这样,DolphinDB在解析时直接将st注册为变量,因此不需要添加
go
语句。 go语句的详细示例请参考go — DolphinDB 2.0文档。

某些脚本语言逐行执行代码。一些高级语言逐步执行代码。例如,C++程序遵循编译-链接-执行的过程。通过结合两者的优点,DolphinDB可以在解析过程中识别错误,避免在长时间的脚本执行后发现语法问题、参数不匹配等错误的情况。此外,大多数语言使用传统的字典方法将变量名称与相应的值关联起来。 DolphinDB在解析时将每个变量与一个ID关联起来,并在执行时使用这些ID来访问变量值,这样可以节省搜索时间并提高执行速度。

© www.soinside.com 2019 - 2024. All rights reserved.