kdb / q - получить выражение по местоположению для содержащей его строки исходного кода? - PullRequest
2 голосов
/ 26 апреля 2019

Я играю с новым Q.trp от Q и объектом отладки, который вы получаете в случае ошибки.Из того, что я вижу, объект отладки содержит строковое представление исходного кода, где произошла ошибка, а также смещение в той строке, где была вызвана ошибка.

Например,

{
  something: 123;
  x: 123; ThisThrowsAnError[456;789]; y: 123;
}[]

при выполнении вышеприведенного кода объект отладки будет содержать этот код во всей его полноте, а также смещение, указывающее на (начало) ThisThrowsAnError [].

Мой вопрос - на основе этой информации,Как я могу извлечь весь оператор, который вызвал ошибку?Например, в приведенном выше примере я хотел бы извлечь "ThisThorwsAnError [456; 789]".

Вещи, о которых я думал до сих пор ...

  • Извлечение строки из смещения, до конца строки.Не работает, хотя, поскольку в той же строке могут быть другие операторы (например, "y: 123" выше)

  • Разбор исходного кода (буквально, с "parse"),Но тогда что ..?Выводом может быть что угодно (например, лямбда или список операторов), а затем все, что еще нужно, каким-то образом нужно сопоставить с исходными местоположениями

Цените любые идеи!Спасибо

...