@dlangru

Страница 5 из 719
Dmitry
09.04.2016
16:52:46
там тебе только ddbc нужен

а все, понял — да вне тела меодов так нельзя

спасибо)

@chebotarevp а можно как-то сделать так, чтобы экземпляр класса не надо было в конструктор передавать, а он был всегда доступен?

Google
Dmitry
09.04.2016
17:07:53
Ну вот как я до main его объявил

MyClass mc; void main() { mc = new MyClass();

B дальше чтобы я мог сделать: class testClass { void foo () { mc.say(); не передавая все это в конструктор класса

Pavel
09.04.2016
17:12:42
Передавать объекты в другие объекты - это хорошая практика, называется dependency inversion

Но если хочешь можешь закостылить, например сделать класс со статическими свойствами, и туда в эти свойства все сохранять, а потом из любого места программы обращаться к этим свойствам

Dmitry
09.04.2016
17:14:23
а как это сделать не мог бы показать?

или там просто ключевое слово static нужно?

Тут по инверсии зависимостей только тонко намекающие демотиваторы возникают... http://lh3.ggpht.com/-0j4EeQ7SvCU/VCOszb8-0VI/AAAAAAAAMKo/NpTyokx2SDg/clip_image001_thumb%25255B1%25255D.jpg?imgmax=800

Pavel
09.04.2016
17:17:26
Да это все херня )

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

Да, когда больше надо чуть писать, но зато такой класс и тестировать удобнее и вообще он гибче.

https://dlang.org/spec/attribute.html#static вот статические свойства думаю создаются так же как и методы

Dmitry
09.04.2016
17:23:46
Так, тоесть до main объявить класс. Потом создать класс и в нем все методы как static пометить?

Google
Dmitry
09.04.2016
17:25:38
афигеть заработало!

минусы какие у такого подхода?

А могу я вот так сделать? class DBConnect { Statement stmt; Config config; static this(Config config) { // тут код инициализации } нужно ли мне Statement stmt; как то помечать, что они статические тоже?

Pavel
09.04.2016
17:40:20
минусы какие у такого подхода?
Ты везде будешь использовать этот класс, и когда твой код разрастется, рефакторинг окажется адом. Все будет зависеть от твоего глобального класса.

Со временем он превратится в помойку в которой будут лежать десятки или даже сотни статических методов и свойств.

И новые люди, пришедшие в проект, не в силах будут разобраться что для чего предназначено.

В итоге при малейшем изменении разработчики будут кричать "НЕ ТРОГАЙ ВДРУГ ЧТО ОТВАЛИТСЯ!!!1", и убегать за дозой транквилизаторов.

Dmitry
09.04.2016
17:42:16
Тоесть главная задача — просто не делать его большим? т.е. если делать глобальным, то пихать туда самый минимум?

Pavel
09.04.2016
17:42:29
Ну да

Но такое уж свойство разработки - если где-то сделал криво, то со временем это место разрастется и начнет доставлять боль.

Dmitry
09.04.2016
17:43:03
понял, спасибо

А в том фрагменте кода выше я правильно пытаюсь static this сделать?

Pavel
09.04.2016
17:49:31
Для меня загадка как оно должно работать) Конструктор не может быть статическим

Вот инициализация модуля static this это еще ладно.

Dmitry
09.04.2016
17:50:26
так, все я уже оценил гемор статических классов) сложно понять dbname это экземпляр какого класса)

Pavel
09.04.2016
17:50:28
Поэтому такое у тебя компилироваться не должно, либо оно работает как то по соглашению в d, надо гуглить

Dmitry
09.04.2016
17:51:40
хех, такое вот работает https://ideone.com/qowBjg

Pavel
09.04.2016
17:53:55
mc тогда вообще можешь убрать везде, оно не нужно

Dmitry
09.04.2016
18:00:32
С ПГ не было времени посмотреть кстати?

Pavel
09.04.2016
19:03:41
Не, еще не смотрел

Google
Alex
10.04.2016
06:52:54
https://ideone.com/ts5qMb

а точка что значит?

это то же что и ::mc.say()

в с++

Dmitry
10.04.2016
10:03:26
Я Си вообще не знаю...

шоткарт для указания на глобальный объект?

Alex
10.04.2016
10:28:49
да

Dmitry
10.04.2016
10:50:00
Подскажите, не могу разобраться. Вот есть http://dlang.org/phobos/std_experimental_logger.html Как я понял можно как-то указывать уровень логгирования. Т.е. в самом конструкторе указать, что логгировать к примеру только Критикал, а потом если надо поменять переменную и логгировать еще и Ворнинги. Вопрос в том как это сделать

Так, предположим у меня в main объявлена часть которая должна быть видна в файле в котором собраны функции без классов. Есть ли варианты кроме как import App.d делать, чтобы из этого файла была видна данная переменная? Ну мне чисто с точки зрения красоты.

http://vistanews.ru/computers/software/53659

Есть тут кто живой? Я тут все еще с ПГ мучаюсь.

Как мне с помощью этого драйвера ubyte [] получить? https://github.com/pszturmaj/ddb/commits/master

Пробовал вот так: http://www.everfall.com/paste/id.php?vcp80n6wdhot

ошибка: source\app.d(28,13): Error: cannot implicitly convert expression (( VariantN!20u __tmpfordtor3893 = row.opIndex(1u);

Так. Следующий код собрался и запускается: try { auto result = cmd.executeQuery; foreach (row; result) { writeln(row[0]); x = row[1].get!(ubyte[]); } } catch (ServerErrorException e) { // Probably table does not exist - ignore } Тоkько получаю ошибку: \exception.d(679): Memory allocation failed

Размерность x: ubyte [] x;

Evil
12.04.2016
16:08:17
мда

Alex
12.04.2016
16:11:44
шок

Dmitry
12.04.2016
17:28:56
Короче ад. Протрахался всю неделю. Только сегодня один из драйверов заработал

Pavel
12.04.2016
20:34:13
Короче ад. Протрахался всю неделю. Только сегодня один из драйверов заработал
У меня дежавю. Вспомнил почему я лет 8 назад забросил C++ ?

Google
Dmitry
13.04.2016
07:06:50
Ну в С++ на это бы месяц ушел)

Подскажите, как передать структуру в функцию: MyData [] mydata; MyData md; fbconnet(md); ... void fbconnet(MyData md) {

он не может понять тип которой мы туда передаем

Max
13.04.2016
10:34:02
Во первых, добавь к типу в функции звездочку а в вызове &, иначе ты вхолостую копируешь структуру. Во вторых, что именно он не понимает? Может ты массив пытаешься передать?

Dmitry
13.04.2016
10:34:38
http://dpaste.dzfl.pl/a968efd60f53

Max
13.04.2016
10:37:57
У тебя структура вне видимости функции, лол

http://dpaste.dzfl.pl/ee893077f283

Dmitry
13.04.2016
10:39:02
о пасибо

а кроме как до main ее объявлять есть еще варианты?

Max
13.04.2016
10:47:19
Как угодно, хоть после вфункции, компилятор не однопроходный, главное чтобы в зоне видимости для функции была структура

Dmitry
13.04.2016
11:14:28
А не подскажешь, что ему вот тут не нравится с типами данных. Что во что он хочет чтобы я перевел: Error: incompatible types for (("UPDATE USERS SET USERBLOB =") ~ (cast(const(byte)[])md.userblob)): 'const(char)[]' and 'const(byte)[]'

Вячеслав
13.04.2016
12:21:26
Подозреваю ты сравниваешь const char и const byte а оно хочет чтобы ты сравнивал один тип

Я правильно понимаю, что ты юзерблоб в байтовый массив кастуешь? А потом сравниваешь с массивом символов

Dmitry
13.04.2016
12:24:13
как я понимаю оно склеивать не может стринг с ubyte

Вячеслав
13.04.2016
12:24:19
Или приравниваешь

Ага

Ты строку свою к байтовому массиву приведи

Dmitry
13.04.2016
12:25:24
но это не помогло. У меня в итоге новая проблема. Мне же в FireBird данные нужно вставлять — а единственный драйверн который у меня заработал, это драйвер от Адама, который не умет prepare statment делать т.е. хз как данные теперь в БД пихать

и хз что теперь делать даже

Вячеслав
13.04.2016
12:26:55
А ручками ее подготовить никак?))

Google
Dmitry
13.04.2016
12:27:12
а как?

Вот есть запрос. db.query("UPDATE USERS SET USERBLOB =" ~ cast(string)md.userblob ~ " WHERE ID=1"); Как я понимаю данные подцепить к нему можно какие-то только через prepared string

Вячеслав
13.04.2016
12:28:31
У тебя юзерблоб что содержит?)

Dmitry
13.04.2016
12:28:45
byte []

cast(string) тут лишнее ^

Max
13.04.2016
12:31:03
Судя по прошлой ошибке ты наоборот блоб пытаешься в ubyte конвертировать. Попробуй как обычный массив символов всё сложить

Вячеслав
13.04.2016
12:32:10
Тебе нужно в стринг превратить байтовый массив) Вот и гугли как это сделать в Д) тебе тот prepare string. Ну и Макс возможно правильно говорит и у тебя блоб не байтовый массив

Dmitry
13.04.2016
12:32:40
Max, нет у меня как раз блоб в байтовый массив читается вот его тип http://www.everfall.com/paste/id.php?46y5rd9zxeb0

Весяслав, ты предлагаешь прям в sql запрос засунуть userblob = 10101010110... where ID=1 ?

Вячеслав
13.04.2016
12:33:52
Да блин

Тебе нужно в стринг превратить байтовый массив) Вот и гугли как это сделать в Д) тебе тот prepare string.

Внимательно читай

Dmitry
13.04.2016
12:35:11
зачем стринг то? Мне же byte [] надо под видом string в БД передать

Вячеслав
13.04.2016
12:36:43
Эм. Тебе нужно сделать "= 1110110"?

Dmitry
13.04.2016
12:38:03
ну вот смотри. Как я понимаю prepared string это штука которая позволяет ВНЕ текстового компонента передать какие-то данные. Драйвер prepared string не умеет. Отсюда я предполагаю, что может бинарную строку кастануть в байтовое представление и прям так попробовать вставить

Pavel
13.04.2016
12:42:10
Или в хексовое представление

Вячеслав
13.04.2016
12:42:19
Кхм. У тебя там работает .to!string например? Попробуй замутить такое с бинарной строкой. Или cast(char[]) тоже должно сработать. Не понимаю проблемы запихнуть цифры в строку...

Страница 5 из 719