
Oleg
21.09.2016
08:35:16
нет

Sergey
21.09.2016
08:35:38
нет - это для первого или вторго утверждения?)

Oleg
21.09.2016
08:36:08
не будет выполняться каждый раз
если класс создаётся не в конструкторе, а как init значение, он будет разделён между всеми структурами

Google

Oleg
21.09.2016
08:36:36
его адресс хранится в init значении

Sergey
21.09.2016
08:36:52
вот теперь дошло. спасибо
когда вы это сказали в первый раз, моя мысль ушла в другую сторону)

Dmitry
21.09.2016
11:21:34
А что ему вот тут может не нравиться?

Anatoly
21.09.2016
11:22:58
ну там результат выполнения метода)
а это void
очевидно

Dmitry
21.09.2016
11:23:34
а... тоесть вызывать без скобок надо?

Макс
21.09.2016
11:25:15
Да, то есть надо не «вызывать», а «передавать», так сказать

Dmitry
21.09.2016
11:25:52
а чем вызов от передачи отличается? Как я понимаю Ди не Джаваскрипт, где скобки - это вызов
Походу эта штука не для методов: getAttributes
Takes one argument, a symbol.

Макс
21.09.2016
11:30:19
symbol'ом может быть любой символ, в т.ч. и метод

Google

Макс
21.09.2016
11:31:27
со скобками у тебя получается: __traits(getAttributes, void)
без скобок получается: __traits(getAttributes, a.sayGood)

Dmitry
21.09.2016
11:31:30
а что ему тогда тут не нравится:
т.е. когда идут скобки идет вызов, а без него типа имя указываю?

Макс
21.09.2016
11:32:26
У него в рантайме нет доступа к A.bad, так как это нестатическое поле
вынеси bad за пределы класса либо сделай статическим

Dmitry
21.09.2016
11:32:55
а... эта штука только для статики — понял

Макс
21.09.2016
11:33:39
а можно вообще ставить UDA в виде @"bad" и сравнивать со строкой "bad"
вроде бы

Anatoly
21.09.2016
11:34:24
http://melpon.org/wandbox/permlink/27G88aAfaTMkmss6
а почему нужны именно строки?

Dmitry
21.09.2016
11:35:20
да я пока просто эксперементирую

Anatoly
21.09.2016
11:35:37
А, а я думал что-то полезное пишешь)

Dmitry
21.09.2016
11:37:05
да пока рано — надо разобраться с темой т.к. на ней как я понял завязана генерации REST в vibed
@ttldtor слух, я не могу понять чем твой код от моего отличается
вроде бы тоже самое делая — а у меня ошибка вылетает
И получается ты обращаешься к полю не создавая экземпляр класса так?
ему нужно чтобы эти переменные были скоупом выше объявлены

Anatoly
21.09.2016
12:06:47
ну stringof не совсем поле)

Google

Anatoly
21.09.2016
12:07:41
точнее, оно работает с типами

Grigirii
21.09.2016
12:08:00
тут не в поле дело. а какое значение должна вывести эта программа? значение есть только на объекте, а объекта нет чтобы взять значение bad. компилятор об этом и пишет
UDA очень редко используют с динамически формируемыми значениями. чаще всего просто константы либо шаблоны, объявляющие некоторые типы. не надо пытаться создать аттрибут-переменную

Dmitry
21.09.2016
12:08:58
т.е. объект только в рантайме будет создан и сейчас до его аттрибуов не дотянуться?

Grigirii
21.09.2016
12:09:08
да
UDA вообще полностью компайл тайм штука

Anatoly
21.09.2016
12:09:55
недавно выяснили, что не полностью

Dmitry
21.09.2016
12:09:55
но вот допустим я же могу класс обойти и вытащить аттрибуты у всех методов? так?
значит у методов информацию можно в компайл-тайм вытащить

Grigirii
21.09.2016
12:15:11
да полностью CT. просто можно атррибутом задать алиас на переменную и менять её значение. при этом сам атрибут останется неизменным со времени компиляции. максимум, что можно это:
string bad = "bad";
class A
{
@bad void meth(){}
}
void main()
{
A a = new A();
alias field = I!(__traits(getAttributes, A.meth)[0]);
field = "hell";
writeln(field);
}

Dmitry
21.09.2016
12:17:43
да я просто пытаюсь с ними пока разобраться, чтобы понять суть генераотра интерфейсов лучше

Dmitry
21.09.2016
12:17:49
а то по нему потом будет куча вопросов

Eto
21.09.2016
12:24:17

Anatoly
21.09.2016
12:29:09
блин, в новой версии dmd это "сломали" =)
http://melpon.org/wandbox/permlink/gqezXUrZwJUjRbci
разве это компилтайм было?

Grigirii
21.09.2016
12:30:27
да

Anatoly
21.09.2016
12:31:03
а... забавно

Grigirii
21.09.2016
12:31:10
в аттрибут сохраняется алиас на переменную X. сам атрибут поменять нельзя. а вот почему в новой не собирается мне пока непонятно

Eto
21.09.2016
12:34:03
На 2.071.2 работает.

Google

Anatoly
21.09.2016
12:34:38
хм, видимо готовят сюрприз

Grigirii
21.09.2016
12:34:40
а на дев 72 нет. возможно пока просто баг, её же даже в бетту не отдавали

Dmitry
21.09.2016
12:38:17
судя по тому что там все ломается активно это реально сложная тема
блин, есть где-то статьи где для дураков разжовано как Rest интерфейс генерить
а то везде где я читаю ожидается что программер уже все знает
Вот я в доку смотрю и логики не вижу:
// GET /api/greeting
@property string greeting();
// PUT /api/greeting
@property void greeting(string text);
почему блин одно PUT второе GET вызывает

Grigirii
21.09.2016
13:21:04
по сигнатуре. но обычно используют соглашения по именованию http://vibed.org/api/vibe.web.web/registerWebInterface

Dmitry
21.09.2016
13:21:44
А это во всех фреймворках такая система или есть какие-то попроще? Я не только Ди имею ввиду

Grigirii
21.09.2016
13:22:34
можно явно аттрибутом указывать, это более распространённый в Java способ

Dmitry
21.09.2016
13:30:00
а как часто подобная тема бывает нужна? Типа может проще руками все генерить? Без этих наворотов?

Admin
ERROR: S client not available

Grigirii
21.09.2016
13:30:49
это колосально проще, чем руками. позволяет просто пользоваться интерфейсами на уровне D, не задумываясь о том, как это будет представлено
особенно если с обоих сторон сервиса D
ну или автоматом сгенерённый js

Dmitry
21.09.2016
13:31:31
Во нашел пример https://github.com/rejectedsoftware/vibe.d/blob/master/examples/rest/source/app.d
@rootPathFromName навешан на interface Example1API я правильно понимаю?

Grigirii
21.09.2016
13:32:21
да

Dmitry
21.09.2016
13:33:03
и это какая-то константа фреймворковская так?

Grigirii
21.09.2016
13:33:18
да
http://vibed.org/api/vibe.web.common/rootPathFromName

Google

Eto
21.09.2016
13:52:10

Grigirii
21.09.2016
13:53:12
да, нестандартное бывает. особенности сериализации, или надо всего один метод наружу вытащить. это проще руками

Dmitry
21.09.2016
13:54:05
как я понимаю листенеру нужно что-то иное так?

Grigirii
21.09.2016
13:56:38
http://vibed.org/api/vibe.http.server/listenHTTP
это все способы его использования
он принимает функцию void function(HTTPServerRequest, HTTPServerResponse), а не API

Dmitry
21.09.2016
14:18:00
В итоге вот что смог сделать. Лучше чем ничего конечно, но...
http://www.everfall.com/paste/id.php?xvc7syz587or
теперь получается все урлы которые я планирую обрабатывать добавлять в интерфейс и реализовывать внутри класса API так?
т.е. вся логика приложения будет в этом классе?
Я вот понять не могу.
https://github.com/rejectedsoftware/vibe.d/blob/master/examples/rest/source/app.d#L61
postSum(int a, int b) откуда параметры то принимает?

Grigirii
21.09.2016
14:31:30
от клиента

Dmitry
21.09.2016
14:49:42
Так. Но обычно же просто json прилетает так?
Писать Json x и дальше х обрабатывать?

Grigirii
21.09.2016
14:50:10
да, и фреймвёрк десериализует, проверив типы и отдаст в аргументы
для того это всё и надо чтобы руками в json вообще не лазить

Dmitry
21.09.2016
14:51:12
Э... Так до компа доберусь. Надо на примере глянуть
А то не совсем понял

Grigirii
21.09.2016
14:52:20
и снова та же ссылка: http://vibed.org/api/vibe.web.rest/registerRestInterface
в примере даже написано
// vibe.d takes care of all JSON encoding/decoding
// and actual API implementation can work directly
// with native types

Dmitry
21.09.2016
14:58:43
Тоесть если указано что надо json принимать он серализует входящие данные в json?

Grigirii
21.09.2016
14:59:27
ну как сериализует, там приходит json, он и отдаёт json
а вот если не json, то десереализует