Точечная запись с датами

Я пытаюсь понять, как q определяет точечную запись дат.

Случай 1. Проблема с временной переменной

Например если я сделаю следующее, чтобы получить день с даты:

q) d:2014.06.14

q) d.dd   
  14 i

Но если я попытаюсь сделать это без какой-либо временной переменной:

q) (2014.06.14).dd

 Error: .dd

Вопрос: Почему для применения записи через точку требуется переменная.

Случай 2. Внутренние функции:

Точечная запись с датой не работает внутри функций.

q) {x.mm}[2014.01.01]

Error: x.mm

Решение для этого кастинг

q){`mm$x}[2014.01.01]  
  1i

Вопрос: почему свойство временной переменной не работает внутри функции?

Я хочу понять поведение точечной записи.


kdb
person Rahul    schedule 26.06.2014    source источник


Ответы (3)


Точечная запись применяется только к вещам с «именами» в смысле принадлежности к дереву рабочей области (и к столбцам в запросах qsql). По сути, если вы не можете успешно произнести get`a, вы не сможете произнести и a.dd.

person Aaron Davies    schedule 30.06.2014

Все правильные вопросы с некоторыми расплывчатыми ответами :)

Случай 1. Темпоральная переменная. Проблема/вопрос: почему для применения записи через точку требуется переменная.

Точечная нотация — это не конструкция, которую можно использовать, как в других языках. Это быстрый способ получить целочисленные компоненты даты, записанные в компилятор (т.е. я подозреваю, что компилятор, вероятно, просто ищет [дата]. и ничего более сложного).

Случай 2: Внутри функций/Вопрос: почему свойство темпоральной переменной не работает внутри функции?:

Нотация через точку не предназначена для использования внутри функций. Так было давно, хотя я никогда не слышал вразумительного объяснения, почему.

person Manish Patel    schedule 26.06.2014
comment
Спасибо, но все же это требует дополнительных исследований. Я знаю, что эта концепция не очень ясна, и в Интернете недостаточно ресурсов. - person Rahul; 26.06.2014

Я помню, как читал это где-то на code.kx:

http://code.kx.com/q4m3/2_Basic_Data_Types_Atoms/#257-constituents-and-dot-notation

Дополнительно: особенностью q является то, что запись через точку для доступа к временным составляющим не работает с аргументами функции.

Я полагаю, что доступ к составляющим переменной даты или времени имеет свои ограничения в локальной переменной VS глобальной переменной.

person WooiKent Lee    schedule 26.06.2014
comment
Итак, это в некоторой степени объясняет случай 2 (нет четкого объяснения такого поведения), но как насчет случая 1? - person Rahul; 26.06.2014
comment
imo, необработанный объект сам по себе не будет иметь особых свойств, построенных на себе, это будет просто объект с определенным типом объекта, не более того. Но при назначении объекта переменной может быть фоновая работа, которую q выполняет, чтобы добавить дополнительные свойства к переменной (например, эти составляющие). Я надеюсь, что это мнение достаточно обосновано: P - person WooiKent Lee; 26.06.2014
comment
@rahul, я думаю, лучше всего придерживаться кастинга (date$month и т. д.), так как это всегда сработает. - person JPC; 27.06.2014
comment
@WooiKent: я думаю, что ты в чем-то прав. Это то, что я пытаюсь понять, что q делает внутри. - person Rahul; 27.06.2014
comment
@JPC: я знаю, что кастинг работает, но просто пытаюсь понять эти концепции. - person Rahul; 27.06.2014
comment
@ Рахул, это честно. Не хотел подразумевать, что вопрос нехороший или что вам не следует знать, просто хотел дать универсальную альтернативу. - person JPC; 27.06.2014