@dlangru

Страница 17 из 719
Dmitry
13.06.2016
16:05:54
ну чтобы по полям проверить есть ли пользователь в БД, какая у него группа, не админ ли он

т.е. если бы было есть\нет было бы проще, но вот я хочу чтобы именно расширенная инфа была.

Oleg
13.06.2016
16:07:42
бррр

а потом что ты делаешь?

Google
Dmitry
13.06.2016
16:08:16
ну вот у меня есть чувство что упорото делаю, но хочу понять можно ли так вообще

Oleg
13.06.2016
16:08:29
вот ты получил эту структуру, узнал, а что потом?

ты ведь куда-то заносишь данные?

в сессию например

Dmitry
13.06.2016
16:09:03
а потом в соотстветствии с данными в ней я делаю ответ в формате JSON для веб-браузера

Eto
13.06.2016
16:09:49
Давайте сделаем отдельную группу для такого рода обсуждений. Это всё к D не относится.

Oleg
13.06.2016
16:10:00
в целом согласен

Dmitry
13.06.2016
16:10:39
ок

Как назвать группу?

Oleg
13.06.2016
16:10:59
d-web?

dlang-web?

Dmitry
13.06.2016
16:11:20
проще уж d-noob)

Oleg
13.06.2016
16:11:23
вопросы аутентификации, авторизации, работы с базами

Google
Dmitry
13.06.2016
16:16:14
https://telegram.me/d_web

Pavel
13.06.2016
16:18:23
Зачем 100 групп создавать?) Тут и так обсуждение очень редко идет

Oleg
13.06.2016
16:19:19
а почему нет?

кому что будет интересно

просто нужно обозначить что в какой группе

Dmitry
13.06.2016
17:06:00
Спрошу все же тут т.к. вопрос общего плана. лямбда не может сама по себе булевое значение возвращать. if (usersFromDB.filter!(u=>u.login.canFind(login) && u.password != password)) я добавил canFind только вот с первой частью он вроде бы логично смотрится, а как им != заменить ?

я про вот это: && u.password != password

Eto
13.06.2016
17:06:45
Так и оставяй. Просто filter на canFind замени.

А, стоп. u => u.login.canFind(login) — это не правильно.

Dmitry
13.06.2016
17:07:51
а как надо?

Eto
13.06.2016
17:08:33
Так и оставяй. Просто filter на canFind замени.
Вот так, только с прошлым кодом.

Dmitry
13.06.2016
17:09:30
if (usersFromDB.canFind!(u=>u.login.canFind(login) && u.password != password)) так?

Eto
13.06.2016
17:12:11
u.login == login только.

Dmitry
13.06.2016
17:13:21
filter! же нужен для того чтобы по лементам ходить разве нет? canFind же он только для проверки на bool

Oleg
13.06.2016
17:14:44
в filter ты передаёшь делегат, который возвращает bool

в случае, если делегат возвращает true для элемента диапазона, то этот элемент становится частью выходного диапазона

Dmitry
13.06.2016
17:15:27
а тоесть типа достаточно что один из элементов проверки возвращает что-то булевое?

Oleg
13.06.2016
17:15:41
[1,2,3,4,5,6].filter!(a=> a > 2) == [3,4,5,6]

filter не возвращает булево значение

возвращает видоизменённый диапазон

Google
Oleg
13.06.2016
17:16:40
принимает делегат, который должен иметь 1 аргумент — проверяемый элемент

мне кажется это всё должно быть напрямую понятно из названия filter

вот map не настолько очевиден по названию

но это для русскоговорящих

фильтр фильтрует, как ни странно

Dmitry
13.06.2016
17:18:27
э... покажите плиз как надо. У меня теперь так получилось: if (usersFromDB.canFind(u.login == login && u.password != password))

Oleg
13.06.2016
17:18:42
примерно так

Dmitry
13.06.2016
17:19:08
Error: undefined identifier 'u'

Oleg
13.06.2016
17:19:13
if (usersFromDB.canFind!(u=>u.login == login && u.password != password))

я бы сначала выучил сам язык

именно язык как язык

Dmitry
13.06.2016
17:19:57
да без реальных задач это не получится...

вот учу в процессе

я многие вещи годами продолжаю не понимать к сожалению

Oleg
13.06.2016
17:20:48
просто ты не прилагаешь достаточно усилий

Dmitry
13.06.2016
17:21:03
if (usersFromDB.canFind(u=>u.login == login && u.password != password)) —- source\app.d(150,28): Error: template std.algorithm.searching.canFind cannot deduce function from argument types !()(Collection!(User), void), candidates are: C:\D\dmd2\windows\bin\..\..\src\phobos\std\algorithm\searching.d(2151,1): std.algorithm.searching.canFind(alias pred = "a == b")

Oleg
13.06.2016
17:21:03
ты пытаешь в первую очередь получить результат, а понимание потом

if (usersFromDB.canFind!(u=>u.login == login && u.password != password))

восклицательный знак

Dmitry
13.06.2016
17:22:12
О помогло

Google
Oleg
13.06.2016
17:22:18
а почему?

Dmitry
13.06.2016
17:22:25
я просто плохо понимаю как работают эти шаблонные функции

Oleg
13.06.2016
17:22:33
вот вот...

инстанцирование — это, можно сказать, создание экземпляра функции (кода новой отдельной функции) во время компиляции

параметры инстанцирования передаются во время компиляции

потому что это инстанцирование

без восклицательного знака — передача параметров вызову функции

во время выполнения программы

и это 2 отдельных процесса

во время компиляции можно использовать только вычислимые во время компиляции параметры

тоесть нельзя написать так auto a = readln(); auto b = someTemplate!a;

потому что a во время компиляции не известно

я что-то прояснил или только запутал?

Dmitry
13.06.2016
17:31:21
уф...

честно только запутал. Я слишком гумманитарий по образованию к сожалению. Я классы то ели освоил

это для меня черная магия просто. Вроде что-то научился делать но не более

Oleg
13.06.2016
17:33:15
понимание правил языка даётся всем) я тебя уверяю)

дело в мотивации

Dmitry
13.06.2016
17:33:29
у меня на это просто годы уходят

Oleg
13.06.2016
17:33:39
понимание того что под капотом это уже другой вопрос

Google
Oleg
13.06.2016
17:34:02
насчёт шаблонов можно провести некоторую аналогию

шаблоны это как правила для построения конкретики

типа трафарета чтоли

Dmitry
13.06.2016
17:34:37
я просто не понимаю какие функции могут быть шаблонами а какие нет

Oleg
13.06.2016
17:34:43
оу

ну это никто не поймёт, пока в документации не прочтёт)

Dmitry
13.06.2016
17:35:15
Я прочитал. Понял только что дело в восклицательном знаке

Oleg
13.06.2016
17:35:30
различия в сигнатуре минимальны

void foo( size_t k ){} void bar( size_t k)() {}

если только одна пара круглых скобок как у foo, то это простая функция

если 2 пары круглых скобок (как у bar) , то это шаблонная фукнция

и для неё параметр k передаётся при компиляции

Dmitry
13.06.2016
17:37:04
шаблонная это значит в нее разные аргументы можно передавать?

Oleg
13.06.2016
17:37:19
нет... это значит, что она "не готова"

до конца не известно что там за код

вариантами могут быть различные типы данных, alias'ы, просто значения

чтобы до конца скомпилировать функцию её нужно инстанцировать соответствующими параметрами, которые ей требуются для полного становления

шаблонные функции нельзя запихать в бинарную библиотеку, только библиотека в исходных кодах

потому что для её полного перевода в бинарный вид нужно подставить нужные ей параметры

в документации часто можно встретить template find(alias a) это однозначно шаблон =) потому что "template" в переводе "шаблон" параметры нужно передавать в скобках после восклицательного знака

шаблон это пространство имён, код в котором зависит от параметров инстанцирования

template foo(T) { T[] arr; } writeln( typeid( typeof( foo!(int).arr ) ) ); // int[] }

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