Гость
Форумы / Caché, Ensemble, DeepSee, MiniM, IRIS, GT.M [игнор отключен] [закрыт для гостей] / Начальное значение для типа данных / 9 сообщений из 9, страница 1 из 1
21.11.2014, 12:57
    #38813081
konstantin_11
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Начальное значение для типа данных
Доброго времени суток

У меня в проекте во многих местах используется текущее время создания экземпляра класса:Property Created As %TimeStamp [ InitialExpression = {$zdatetime($horolog,3,1)} ];
Возможно ли создать собственный класс, наследованный от %Timestamp так, чтобы при создании экземпляра класса у него было значение по умолчанию?

Скажем, так:Class Sys.CurrentTimeStamp Extends %TimeStamp
{

 Method %OnNew(pValue As %Library.String = "") As %Status
 {
   Set %this = $zdatetime($horolog,3,1)
 } 

}
Только так почему-то не работает =((

P.S. Новичок в Cache
...
Рейтинг: 0 / 0
21.11.2014, 13:48
    #38813169
krvsa
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Начальное значение для типа данных
konstantin_11У меня в проекте во многих местах используется текущее время создания экземпляра класса:Property Created As %TimeStamp [ InitialExpression = {$zdatetime($horolog,3,1)} ];
Возможно ли создать собственный класс, наследованный от %Timestamp так, чтобы при создании экземпляра класса у него было значение по умолчанию?
Как вариант, сделай абстрактный класс с таким свойством... В остальных классах добавляй его к "родительскому" списку классов, типа такого...
/// tm
Class tmp.tm [ Abstract ]
{
Property Created As %TimeStamp [ InitialExpression = {$zdatetime($horolog,3,1)} ];
}

/// dat
Class tmp.dat Extends (%Persistent, tmp.tm)
{
Property name As %String;
}
...
Рейтинг: 0 / 0
21.11.2014, 17:01
    #38813499
konstantin_11
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Начальное значение для типа данных
Я подумал, что есть и другой вариант - написать функцию, возвращающую нужное мне значение:CurrentTimestamp() PUBLIC
{
  Quit $zdatetime( $SYSTEM.SYS.TimeStamp(), 3, 1 )
}а потом ее применить:Class User.Probe Extends %Persistent
{
Property Dummy As %String;
Property Created As %TimeStamp [ InitialExpression = {CurrentTimeStamp} ];
}Но и это мне не помогло. Компилируется вышеуказанный код без ошибок, однако при попытке добавить запись в таблицу возникает ошибка:

Код: plaintext
[%msg: <Возникла ошибка во время INSERT в таблицу 'Sys.Probe': $ZE=<UNDEFINED>%SQLInsert+7^Sys.Probe.1 *CurrentTimeStamp>]

Подскажите, пожалуйста, что я делаю не так?
...
Рейтинг: 0 / 0
21.11.2014, 17:42
    #38813573
servit
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Начальное значение для типа данных
konstantin_11Подскажите, пожалуйста, что я делаю не так?Много чего:
...
Рейтинг: 0 / 0
22.11.2014, 07:23
    #38813878
konstantin_11
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Начальное значение для типа данных
servitМного чего:
CurrentTimestamp ≠ CurrentTimeStamp
в InitialExpression неправильно вызываете функцию CurrentTimeStamp

О, благодарю! заработало в таком виде:Property Created As %TimeStamp [ InitialExpression = {$$CurrentTimeStamp^Lib()} ];
Причем Lib - это имя файла Lib.MAC, а не имя программы, прописанное в этом файле.

А первый вариант с типом данных, имеющим начальное значение, как я понимаю, реализовать невозможно?
...
Рейтинг: 0 / 0
22.11.2014, 21:35
    #38814214
krvsa
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Начальное значение для типа данных
konstantin_11А первый вариант с типом данных, имеющим начальное значение, как я понимаю, реализовать невозможно?
Ты на русский язык такое сможешь перевести?

Тип данных (строка, чисто, дата, время) ну никак не может иметь начального значения... Начальное значение (применительно к классам) может иметь свойство некоего типа...
...
Рейтинг: 0 / 0
24.11.2014, 05:24
    #38814697
konstantin_11
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Начальное значение для типа данных
krvsa, ответ не по существу, в дальнейшем подобных ответов прошу не давать. я сишный программер, и класс в си может - сюрприз, сюрприз! - иметь конструктор, который в том числе может задавать полям класса начальное значение! ну а то, что тип данных может иметь методы обработки вас, видимо, не смущает. на этом и закончим.
...
Рейтинг: 0 / 0
24.11.2014, 09:25
    #38814756
servit
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Начальное значение для типа данных
konstantin_11А первый вариант с типом данных, имеющим начальное значение, как я понимаю, реализовать невозможно?Нет.

В Caché классы типов данных отличаются по назначению и функционалу от классов объектов:konstantin_11класс в си может - сюрприз, сюрприз! - иметь конструктор, который в том числе может задавать полям класса начальное значение!В Caché тоже, но это будет класс объектов ( %RegisteredObject ), а не класс типов данных ( %DataType ).
konstantin_11ну а то, что тип данных может иметь методы обработки вас, видимо, не смущаетВ Caché тоже класс типа данных имеет строго обозначенный набор методов обработки: Data Types и метода %OnNew() в нём нет, зато он есть в классе объектов, поэтому то Ваш первый пример и не работает.
...
Рейтинг: 0 / 0
24.11.2014, 09:47
    #38814771
krvsa
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Начальное значение для типа данных
konstantin_11я сишный программер, и класс в си может - сюрприз, сюрприз! - иметь конструктор, который в том числе может задавать полям класса начальное значение!
Полям - запросто! Но не типам, как ты писал ранее... Т.ч. и как сишный программер ты видать неочень...
...
Рейтинг: 0 / 0
Форумы / Caché, Ensemble, DeepSee, MiniM, IRIS, GT.M [игнор отключен] [закрыт для гостей] / Начальное значение для типа данных / 9 сообщений из 9, страница 1 из 1
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]