@scala_ru

Страница 689 из 1499
folex
23.05.2017
09:24:28
fixed

Kirill
23.05.2017
09:30:26
Помогите, у меня мозги взрываются. Кейс: есть многомодульный проект, который собирается в итоге в war-файл при помощи xsbt-war-plugin. Все хорошо, но нужно сделать так, чтобы конфигурационные файлы лежали вне jar-ников (чтобы их можно было редактировать после деплоя). Как это сделать-то?

конфиг лежит в ресурсах у одного из модулей. Если я каким-то магическим образом при сборке варника скопирую его в отдельную папку... то что за фигня будет? ведь из jar-ника он никуда не денется. Кто победит в гонке?

folex
23.05.2017
09:33:21
@zuynew syntax как тут же https://tpolecat.github.io/2013/10/12/typeclass.html?

Google
folex
23.05.2017
09:33:57
там он по сути добавляет еще методов для List[T : TypeClass], но это чот не то

Dmitry
23.05.2017
09:34:12
я видимо не так понял

folex
23.05.2017
09:34:38
чот походу так нельзя никак сделать-то как я хочу? %)

Надо вызывать руками какой-нибудь convertToContainingData на каждый элемент, выходит?

Dmitry
23.05.2017
09:35:21
хм

по сути у тебя typeclass Show в примере

folex
23.05.2017
09:36:01
угу

Dmitry
23.05.2017
09:36:17
ща запушу ide

folex
23.05.2017
09:36:25
спасибо :)

Grigory
23.05.2017
09:38:42
а

тебе надо ? => TypeClass

folex
23.05.2017
09:39:07
@pomadchin я хочу чтобы поэлементно были экстеншн методы

Google
folex
23.05.2017
09:39:19
@pomadchin не понял про ? =>

Grigory
23.05.2017
09:39:23
а ну тогда T: TypeClass вполне поэлементно

folex
23.05.2017
09:39:44
Да, но когда мне выходит не получится сделать экстеншн методы

я импилиситно получу какой-то val/object, например ev, и буду делать так: xs.map(v => ev.data(v)) @pomadchin так обычно делают?

Dmitry
23.05.2017
09:40:50
вообще судя по всему тут полиморфная функция

folex
23.05.2017
09:40:51
а мне хочется v.data :)

Dmitry
23.05.2017
09:40:52
или типа того

Grigory
23.05.2017
09:41:04
scala> def check[T](s: Seq[T])(implicit containing: T => ContainingData[T]) = { | s.map(v => v.data) | } check: [T](s: Seq[T])(implicit containing: T => ContainingData[T])Seq[String]

folex
23.05.2017
09:41:23
а, хм

Grigory
23.05.2017
09:42:07
что не писать такую каку подключи кайнд проджектор

Arthur
23.05.2017
09:42:56
Вопрос по макросам, вот есть некий wrapper, возможно ли получить значение переменной a внутри этого враппера с помощью макросов? def someFunc(a: Int) = wrapper { a + 1 }

folex
23.05.2017
09:43:11
def check[T](s: Seq[T])(implicit conv: T => ContainingData[T]) = { s.map(v => v.data) } вот так работает, причем даже если в скоупе есть только implicit class

круто!

Grigory
23.05.2017
09:43:28
так и должно работать)

folex
23.05.2017
09:43:32
@pomadchin эх, а им как такое делать? Пойду попробую разобраться :)

Grigory
23.05.2017
09:44:31
def check[T: ? => ContainingData[T]]

фактически можно понимать как замена <%

ну я читаю такое как T со свойствами ContainingData

но это таоке)

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

Google
folex
23.05.2017
09:47:01
А такое можно без kind projector написать через : в type bound? def check[T : (T => ContainingData[T])](s: Seq[T]) = { s.map(v => v.data) //compile error }

Grigory
23.05.2017
09:47:15
нет

T у тебя в данном случае будет не то T

folex
23.05.2017
09:47:33
угу, понял

Grigory
23.05.2017
09:47:35
а надо компилятору как-то указать, что T будет какое надо

folex
23.05.2017
09:47:45
fun!

folex
23.05.2017
09:47:59
val as = (1 to 10).map(v => A(v)) check(as)

Dmitry
23.05.2017
09:48:03
ааа

folex
23.05.2017
09:48:08
?

Dmitry
23.05.2017
09:48:17
я думал так что бы там были и A и B

в одном Seq

folex
23.05.2017
09:48:33
ухх, не :)

@pomadchin @zuynew спасибо!

folex
23.05.2017
09:51:59
почему? А как еще без kind projector? @rudogma

Mikhail
23.05.2017
09:53:19
почему? А как еще без kind projector? @rudogma
при чем тут кинд проектор, если у тебя для каждого элемента будет создаваться ContainingData ) лучше иметь ContainingData[T] { def data(value:T):String } ...

folex
23.05.2017
09:54:02
некрасиво %(

но ты прав, да

неужто для этого нет какой-нибудь библиотеки на макросах? %)

Google
Kirill
23.05.2017
09:57:25
неужто здесь никто ентерпрайз кроме меня не пишет :(

Daniel
23.05.2017
09:57:58
смотря что в слове энтерпрайз

Dmitry
23.05.2017
09:58:04
Боль

Daniel
23.05.2017
09:58:20
боль? боль есть

Dmitry
23.05.2017
09:58:32
энтерпрайз ~ боль

Kirill
23.05.2017
09:58:46
в слове энтерпрайз океан боли и кактусов. Сборка проекта в war, деплой на вебсферу под jvm 1.6 и все такое

но, блин, как же при сборке вытащить конфиги наружу

Denis
23.05.2017
09:59:08
но… зачем?

Митко Соловец?
23.05.2017
09:59:10
это у тебя энтерпрайза нормального не было!

и скала так-то на 1.6 работает вообще!

Kirill
23.05.2017
09:59:40
да не по наслышке знаю, уже 4й год другой скалы я и не знаю (плак-плак)

Dmitry
23.05.2017
09:59:51
-Dconfig.file= ???

Aleksey
23.05.2017
10:00:14
Ребят, а как отличить интерпрайз от неинтерпрайза?

Mikhail
23.05.2017
10:00:29
неужто для этого нет какой-нибудь библиотеки на макросах? %)
для чего? ты придумываешь каких-то сферических коней для себя, потом размышляешь - нет ли для них сферических макросов)

Kirill
23.05.2017
10:00:40
-Dconfig.file= ???
не, я про то, чтобы собрать варник так, чтобы файлы с конфой лежали не внутри jar-ников, а как-то снаружи в classpath

Митко Соловец?
23.05.2017
10:00:49
Kirill
23.05.2017
10:00:57
а то плагин собирает все жарки в WEB-INF/lib и усё

Google
Denis
23.05.2017
10:02:14
vs.map(_.data) или vs.map(ev.data)

Mikhail
23.05.2017
10:03:52
откуда в конвертере взяться бизнес логике. мдя...

Denis
23.05.2017
10:05:00
мне показалось, что это модель, сорян

folex
23.05.2017
10:07:11
seq.map(converter)
https://gist.github.com/folex/7ed9eb9c9a2526872e96562add9db1fa какой больше нравится? :)

Daniel
23.05.2017
10:08:02
голосование сделай

folex
23.05.2017
10:08:28
да я не спора ради, а понимания для

Mikhail
23.05.2017
10:09:49
https://gist.github.com/folex/7ed9eb9c9a2526872e96562add9db1fa какой больше нравится? :)
что будешь делать, если будет пересечение названий? если очень хочется, то ты можешь получить во втором варианте почти первый trait Converter[T] { def uid:Long } import converter._ uid(x)

folex
23.05.2017
10:10:14
пересечение?

Mikhail
23.05.2017
10:11:02
пересечение?
trait ContainingData[T] { def uid:Long } class Model(uid:String)

folex
23.05.2017
10:11:22
а, хм

Grigory
23.05.2017
10:11:26
постараедся недопустить пересечения

тут только такой вариант

Grigory
23.05.2017
10:12:02
всегда когда речь идет об имплисит классах всегда есть вероятность того, что метод не вызовется только потмоу что такая сигнатура уже есть

Mikhail
23.05.2017
10:12:03
тут только такой вариант
или просто делать так, чтобы пересечение не имело значения - разделять и властвовать

Mikhail
23.05.2017
10:12:52
а вот тут не понял, как converter должен выглядеть
ну ептыть // versus this def doWork[T](xs: Seq[T])(implicit ev: ContainingData[T]) = { import ev._ ... xs.map { x => Something( eid = eid(x), uid = uid(x), cid = cid(x) ) } }

Grigory
23.05.2017
10:12:57
интересно кстате реальную просадку по памяти и скорости посмотреть на инстанциирование объектов.

folex
23.05.2017
10:13:10
@rudogma ааа %) затупил, сори

Страница 689 из 1499