@jvmchat

Страница 788 из 2890
Руслан
08.12.2016
15:21:08
ugh, почему в java нету reduce right :(
Каждый раз ощущение что говнокод на костылях пишешь

Да я про свою джаву 8)

Vlad
08.12.2016
15:23:04
не надо тут на джаву 8 гнать

Руслан
08.12.2016
15:23:17
А так я решил пока судьба не заставит, это не трогать - я не буду) Глядишь стабилизируется через годик) 2.3.0 уже версия так-то)

Google
Руслан
08.12.2016
15:23:47
не надо тут на джаву 8 гнать
ну стримы такие неудобные

Pavel ?
08.12.2016
15:28:22
ребята кто подскажет куда саппорту в контакт писать?

Kirill
08.12.2016
15:31:54
ну стримы такие неудобные
напиши свой редьюс, что не мужик что ли?

Руслан
08.12.2016
15:32:25
И какими соплями мне его прибить к стримам? (уже StreamEx есть btw)

val handlerWrappers = listOf<HandlerWrapper>(...) var root: HttpHandler = Handlers.routing() root = handlerWrappers.fold(root, {handler, wrapper -> wrapper.wrap(handler)}) ну вот почему я не могу так написать в джаве :(

Kirill
08.12.2016
15:33:36
almost scala!

J
08.12.2016
15:38:51
это норма, но то, что ты хочешь, называется provided скоуп зависимостей, т.е. необходимые библиотечные джарки должны быть подлиты на сервер
кароче расковырял сервак: там матрёшка, на серваке стоит жава 1.7 и нет галсфиша, зато если из сервлета сканить файловую систему и печатать в лог, то выйсняется, что все события происходят на какой-то призрачной машине с 8 жавой и гласфишем дальше в логах видно, что гласфиш грузит какие-то бандлы со старыми версиями жарников, и они валят noSuchMethod

Руслан
08.12.2016
15:42:16
val handlerWrappers = listOf<HandlerWrapper>(...) var root: HttpHandler = Handlers.routing() root = handlerWrappers.fold(root, {handler, wrapper -> wrapper.wrap(handler)}) ну вот почему я не могу так написать в джаве :(
Вот смотрите, задача простая: Есть тип T, есть список функци L<R>, где каждая функция принимает T и возвращяет T, т.е.: T -> T мне нужно взять, и для каждой функции из L выполнить преобразование T -> T на изначальным T, и перезаписать T

t = list.reduce(t, (x,y) -> x.r(y))

А с учетом final/effective final я даже не могу в forEach это удобно сделать... Вот вам и сахар.

Google
Руслан
08.12.2016
15:48:54
так иммутабельность жи!хорошо жи!
Так если бы имутабельность. У меня есть в скоупе foo, которую я не могу изменить, теперь я кладу в скоуп bar, а в bar кладу foo. И вуаля, я из лямбды меняю стейт

Kirill
08.12.2016
15:52:18
Ну так и что тебе всё-таки мешает сделать просто map, и если уж так хочется, то переложить результат в исходную переменную(список изначальных аргументов типа Т)? результат получишь тот, что хочешь-список с преобразованными элементами, та же переменная(имя то же, по крайней мере)

а вообще, то что ты говоришь противоречит тому, как должны работать операции foreach/map - без сайд эффектов, поэтому так сделать и нельзя

Руслан
08.12.2016
15:55:34
так они и не должны так быть сделаны, даже если было бы без бо-бо
В Котлине если меня препрёт я из коллекций могу достучаться до стейта и мутировать его.

Kirill
08.12.2016
15:56:00
ох, опасную игру ты ведешь...мы за чистоту функций!

Pavel ?
08.12.2016
15:56:50
чем чище функция тем сильнее сходит с ума янг)))

Yan?
08.12.2016
15:57:36
http://www.yegor256.com/2016/12/06/how-to-pay-programmers-less.html

Руслан
08.12.2016
15:57:40
ох, опасную игру ты ведешь...мы за чистоту функций!
сама функция в которой может идти преобразование при этом остается чистой, лябду я и так и так тестировать не буду

fun wrap(handler: HttpHandler, wrappers: List<HandlerWrapper>): HttpHandler { var root = handler wrappers.forEach { root = it.wrap(root) } // 1 root = wrappers.fold(root, { handler, wrapper -> wrapper.wrap(handler) }) //2 return root } Вот пример

Kirill
08.12.2016
16:01:45
Блин, с телефона не очень удобно читать, но я понял, что ты хочешь сделать обычный fold

Руслан
08.12.2016
16:01:48
в варианте 1 у меня замыкание, а во втором - чисто, модно

Да! В том то и дело, самый, блин, обычный фолд)

Но при этом менее функциональный вариант проще как мне кажется

К моему набору CheckedFunction, CheckedSuplier, ... нужно добавить Wrapper, чтобы вот так на джаве писать: wrappers.forEach { root = it.wrap(root) }

Kirill
08.12.2016
16:06:31
А была бы скала, забабахал бы свой имплисит класс...

или просто взял fold :D

Руслан
08.12.2016
16:07:38
Шанс что разрешат писать либы под джаву на котлине выше, чем что разрешать писать на скале)

Google
Руслан
08.12.2016
16:07:49
В моих реалиях

Kirill
08.12.2016
16:09:35
А какие системы сборки уже могут нормально с котлином работать?

про gradle думаю надо спрашивать @JBaruch

Руслан
08.12.2016
16:10:27
Да я тебе и так скажу - все

Кроме sbt

lein

и т.д.

Gradle, Maven, Kobalt, Ant

Конкретно я с Gradle юзаю как правило

Kirill
08.12.2016
16:11:02
Ну меня больше грэдл интересует, тоже apply plugin и погнали?

Руслан
08.12.2016
16:11:18
Ну buildscript + apply plugin

или если Gradle Kotlin Script (Gradle на Kotlin) просто в одну строчку: kotlinModule()

Kirill
08.12.2016
16:12:51
и полиглот мавен есть?

Руслан
08.12.2016
16:12:53
Хотя не так, там все равно buildscript остался

Gradle: http://kotlinlang.org/docs/reference/using-gradle.html Gradle-Kotlin: https://github.com/gradle/gradle-script-kotlin/blob/master/samples/hello-kotlin/build.gradle.kts#L8 Maven: http://kotlinlang.org/docs/reference/using-maven.html Не знаю про полиглот

Kirill
08.12.2016
16:14:38
эвона как ребята его проталкивают везде, неплохо

Руслан
08.12.2016
16:14:41
Ты просто пишешь на котлине и джаве хоть в одном пакете

Wrapper<HttpHandler> rootWrapped = Wrapper.of(root); handlerWrappers.forEach(wrapper -> rootWrapped.value = wrapper.wrap(rootWrapped.value)); заменяем фолд на костыли и велосипеды

(ну я это в шутку написал конечно)

Pavel ?
08.12.2016
16:35:57
Google
Руслан
08.12.2016
16:36:35
Для себя на 1.1. В проектах последнюю стабильную как правило.

Pavel ?
08.12.2016
16:38:18
#ияиятогожемнения

Maksim
08.12.2016
17:28:10
val handlerWrappers = listOf<HandlerWrapper>(...) var root: HttpHandler = Handlers.routing() root = handlerWrappers.fold(root, {handler, wrapper -> wrapper.wrap(handler)}) ну вот почему я не могу так написать в джаве :(
Потому что, как говорил, если не ошибаюсь, Куксенко. в одном из докладов, они дрочили на параллельную обработку, а не на богатство возможностей. Отчасти поэтому такие некрасивые у нас стримы :(

Andrey
08.12.2016
17:28:58
А кто разрабатывает веб-приложения с использованием Spring MVC, можете подсказать, как на jsp странице по нажатию кнопки перегрузить только определенную табличку, без обновления всей страницы? Делаю вызов метода load (jQuery), но вся страница очищается, остается только заголовок...

Maksim
08.12.2016
17:30:33
В первую очередь потому что обратная совместимость :(
Эм, не уловил. При чём здесь обратная совместимость?

Admin
ERROR: S client not available

Maksim
08.12.2016
17:31:21
Можно было ведь просто extension методы запилить и обворачивать итераторами.

Руслан
08.12.2016
17:31:37
Эм, не уловил. При чём здесь обратная совместимость?
Ну для чего дефолтные методы добалили? Почему Stream не умеет примитивы? А зачем вообще примитивы?)

Тагир хорошо рассказывает про стримы, он наверно лучше всех знает где у них подводные камни)

Можно было ведь просто extension методы запилить и обворачивать итераторами.
Но вместо экстеншен методов сделали дефолтные в интерфейсах

Pavel ?
08.12.2016
17:35:21
нужно расширять байткод в сторону мнемоник над обертками)

тогда примитивы будут ненужны)

Anton
08.12.2016
17:41:04
дефолтные методы добавили в язык как решение эволюции интерфейсов, в частности коллекций

Руслан
08.12.2016
17:41:48
Логическая цепочка к тому, что из-за примитивов у нас сейчас куча классов и интерфейсов

Anton
08.12.2016
17:42:01
does not compute

дефолтные методы и примитивы. где то звено разорвалось

Google
Andrey
08.12.2016
17:42:50
я вызываю $("#request-info").load(baseURL + "/request-info"); где request-info это ид контейнера таблицы <div class="tab-pane tab-page" id="request-info"> в контроллере сделал метод для "/request-info", который возвращает строку с адресом страницы, которая содержит только таблицу

Руслан
08.12.2016
17:44:22
дефлотные методы отдельно / примитивы отдельно

Anton
08.12.2016
17:45:26
вот так лучше :)

Руслан
08.12.2016
17:56:45
Я про другое, например я хочу запустить сначала миграцию, а потом уже стартовать сервис: java -jar artifactory.jar —miragration —config=config.yml // then java -jar artifactory.jar —server —config=config.yml (or —config=https://company.com/config)

http://i2.kym-cdn.com/photos/images/original/000/107/432/i_hug_that_feel.png

Baruch
08.12.2016
17:58:55
Воу, я тебя не правильно понял, я сразу подумал что у тебя проект и собиратся и ранается в одном контейнере.
Вот как и я. Если у тебя ci в отдельном контейнере, то на здоровье, но я бы ожидал там увидеть скорее контейнер дженкинса, чем мавен.

Baruch
08.12.2016
17:59:40
Руслан
08.12.2016
17:59:44
тот же concourse.ci

Чтобы не ставить на хост систему ничего

Baruch
08.12.2016
18:00:03
Руслан
08.12.2016
18:00:30
Чтобы не ставить на хост систему ничего
Одним нужен мавен 2, вторым мавен 3

mvnw
например, но не везде такие штуки есть

Страница 788 из 2890