Вот моя реализация (см. gist ):
Шаг 1: Кодирование для захвата A не является подтипом B
trait NotSubTypeOf[A, B]
Примечание : Мы можем использовать нотацию infix для записи A NotSubTypeOf B
вместо NotSubTypeOf[A, B]
. Шаг 2: Доказательство для любых двух произвольных типов A и B, A не является подтипом B
implicit def isSub[A, B]: A NotSubTypeOf B = null
Шаг 3: Определите неоднозначные импликации для запуска ошибки компиляции в случае, когда A является подтипом B (или A =: = B)
implicit def iSubAmbig1[A, B >: A]: A NotSubTypeOf B = null
implicit def iSubAmbig2[A, B >: A]: A NotSubTypeOf B = null
. Шаг 4: Определите тип лямбда для типа отрицания:
type Not[T] = {
type L[U] = U NotSubTypeOf T
}
С kind-projector это можно сделать гораздо читабельнее.
Шаг 5: Готово !
def iDontLikeStrings[A: Not[String]#L](a: A) = {
println(a)
}
iDontLikeStrings(23) // compiles
iDontLikeStrings(true) // compiles
//iDontLikeStrings("hello") // does not compile
Сообщение об ошибке компилятора для последней строки может быть улучшено в Scala 2.12, которое адресовано SI-6806 .
Кроме того, все это встроено в Shapeless .
Да, наличие художественных активов в управлении версиями очень полезно. Вы получаете способность отследить историю, откатывать изменения, и у Вас есть единственный источник, чтобы сделать резервные копии с. Следует иметь в виду, что художественные активы НАМНОГО больше, таким образом, Ваш сервер должен иметь большое дисковое пространство & сетевая пропускная способность.
я имел успех с использованием по необходимости на очень крупных проектах (+100 ГБ), однако мы должны были обернуть доступ к серверу управления версиями с чем-то немного больше дружелюбного художника.
я услышал некоторые хорошие вещи [приблизительно 111] Alienbrain также, это, действительно кажется, имеет очень гладкий UI.
Мы сохраняем двоичные файлы и изображения в управлении версиями, с помощью По необходимости. Это является большим!
Мы сохраняем много художественных активов, и это масштабируется хорошо для большого количества больших файлов. Это распознает двоичные файлы, те, которые не могут быть diffed и хранят их, поскольку полный файл копирует в бэкэнде.
Это имеет P4V (межплатформенный визуальный браузер), и система миниатюры, таким образом, файлы изображений видны в браузере.
@Damian - Положительная сторона у меток и перекрестных ссылок. Это правда; в то время как у меня нет работы со многими разработчиками на проекте разработки программного обеспечения, я работал на компанию, которая имела отдел дизайна, и знайте, что это - проблема. Разработчики все еще (постоянно) ищут идеальную систему для обработки этого вида вещи. Я думаю, что это больше подходит для отдела дизайна по совместному доступу, поиску и управлению версиями, и т.д. ко всем активам - где существует бизнес-стимул не перестроить колесо везде, где/каждый раз, когда возможно. Я не думаю, что это запросило бы ориентированный на проект способ как метки, и перекрестные ссылки не будут вполне как применимые.
Относительно разности и слияния, я думаю, что управление версиями более очень важно для графических и медиа-элементов. Если Вы думаете об этом, большинство разработчиков собирается быть единственными владельцами файла - по крайней мере, в случае графики - или по крайней мере я думал бы, что это будет иметь место. Мне было бы любопытно получить известие от разработчика.
Мы используем подрывную деятельность. Просто поместите папку под/trunk/docs для аккомпанементов и сделайте, чтобы разработчики проверили, и согласитесь на ту папку. Работы как чемпион.
Интересный вопрос. У меня нет набора опыта, работающего непосредственно с разработчиками на проекте. Когда я имею, это было через договорный вид соглашения, куда они "поставили" дизайн. Я сделал часть своей собственной дизайнерской работы и для веб-сайтов и для настольных приложений, и хотя я не использовал управление исходным кодом в прошлом, я нахожусь в процессе реализации SVN для моего собственного использования, поскольку я начинаю делать некоторую заплаченную работу без контракта. Я намереваюсь использовать версию/управление исходным кодом точно способ, которым я был бы с исходным кодом. Это просто становится другой папкой в соединительной линии проекта. Путем я работал без управления исходным кодом, должен создать активы папка, в который файлы всех носителей, которые являются эквивалентами исходного кода, находятся. Мне нравится думать о PSD's Photoshop как графический исходный код , в то время как вывод JPEG для веб-сайта или иначе скомпилированная версия .
В случае работы с разработчиками, которая вполне возможна, я сталкиваюсь в ближайшем будущем, я хотел бы предпринять попытку иметь их "регистрация" их различные версии их исходных файлов регулярно. Мне будет любопытно считать то, что другие с некоторым опытом скажут в ответ на это.
@lomaxx TortoiseSVN включает программу под названием TortoiseIDiff, который надеется быть разностью для изображений. Я не использовал его, но выглядит интригующим.
TortoiseSVN может показать изменения изображения бок о бок, который действительно полезен. Я использовал его с различными командами с большим уровнем успеха. Художники любили иметь способность откатывать вещи (после того, как они привыкли к понятиям). Действительно занимает много места, все же.
Много графических людей типа захочет что-то более сложное, чем подрывная деятельность. В то время как это хорошо для управления версиями, они захотят систему управления контентом, которая позволяет перекрестно ссылаться активов, меток, миниатюр и такой вещи (а также управление версиями).
Мы также просто помещаем двоичные файлы в управление исходным кодом. Мы используем Мерзавца, но это применялось бы точно также к Подрывной деятельности.
Одно предложение, которое я имею, должно использовать SVGs, если это возможно, потому что Вы видите фактические различия. С двоичными файлами (большинство других форматов изображения), лучшей, которую можно получить, является история версий.
Я определенно подверг бы графику управлению версиями. Разность не могла бы быть очень полезной из различного инструмента как diffmerge, но Вы можете все еще контроль две версии диаграммы и просматривать их рядом для наблюдения различий.
я не вижу оснований, почему результирующая графика не должна быть сохранена в той же системе управления версиями, которую используют кодеры. Однако при создании графики с помощью файлов PSD или файлов PDN, Вы могли бы хотеть создать отдельный репозиторий для тех, поскольку у них есть различный контекст к фактическому концу jpeg или gif, который производится и развертывается с разработанным приложением.