Описание тега enrich-my-library

Enrich-my-library - это шаблон проектирования для Scala, который позволяет добавлять функциональность к существующим классам путем неявного преобразования (обычно путем переноса) одного класса в другой, который предоставляет новые возможности.
1 ответ

Каков наилучший способ использования enrich-my-library в scala?

Это два разных способа реализации. Один короче implicit def toR1(s:String) = new { def getLength = s.length)} Второй длиннее class R2(s:String){def getLength2 = s.length)} implicit def toR2(s:String) = new R2(s) Какой из них лучше?
22 фев '12 в 20:12
1 ответ

Как реализовать flatMap для Option

Я пытаюсь реализовать map а также flatMap как расширение / обогащение для Option, не обманывая и не глядя на то, как это было реализовано в Скалазе. Вот что я получил до того, как застрял: package extensions.monad trait Monad[M[_]] { // >>= ::…
1 ответ

Почему неявный класс Scala не работает, когда один из параметров типа должен быть Nothing?

Обновление: я изменил пример, чтобы его можно было скомпилировать и протестировать. У меня есть неявный класс, который определяет метод обогащения: case class Pipe[-I,+O,+R](f: I => (O, R)); object Pipe { // The problematic implicit class: implic…
2 ответа

Как добавить кросс-продуктовые методы в коллекции Scala?

Надеюсь, это будет простой вопрос о том, как разворачивать библиотеку (потому что другие вопросы по этой теме, как правило, дают ответы за пределами моего текущего уровня навыков). Все, что я хочу сделать, это сопоставить перекрестный продукт коллек…
06 май '13 в 06:17
3 ответа

Обогащение коллекций Scala методом

Как мне добавить foreachWithIndex метод на коллекциях Scala? Это то, что я мог придумать до сих пор: implicit def iforeach[A, CC <: TraversableLike[A, CC]](coll: CC) = new { def foreachWithIndex[B](f: (A, Int) => B): Unit = { var i = 0 for (c …
3 ответа

Как применить шаблон enrich-my-library к коллекциям Scala?

Одним из самых мощных шаблонов, доступных в Scala, является шаблон enrich-my-library *, который использует неявные преобразования для добавления методов в существующие классы без необходимости динамического разрешения методов. Например, если мы хоти…
23 мар '11 в 19:54
1 ответ

Настройте scaladoc для включения методов расширения

Могу ли я настроить scaladoc для включения методов неявных преобразований, указав неявное преобразование? Например дано trait Foo object Operations { implicit class FooOps(val f: Foo) extends AnyVal { def bar = 33 } } Могу ли я сделать скалярный мет…
4 ответа

Есть ли способ "обогатить" класс Scala, не добавляя код в другой объект?

В Scala 2.9, чтобы добавить пользовательские методы к классу библиотеки (обогатить или "прокачать" его), мне пришлось написать что-то вроде этого: object StringPimper { implicit def pimpString(s: String) = new { def greet: String = "Hello " + s } } …
10 фев '13 в 20:58
1 ответ

Почему я могу пометить методы как неявные, но не как конструктор?

Общий шаблон Enrich-My-Library выглядит примерно так class Foo(value: Int) implicit def int2Foo(i: Int) = new Foo(i) Почему нельзя просто добавить implicit самому конструктору, как это class Foo implicit (value: Int) учитывая, что конструктор не нам…
2 ответа

Как динамически отправлять на основе обогащения?

Библиотека Spray-JSON расширяет базовые типы Scala toJson метод. Я хотел бы преобразовать Any в JsValue если есть такой сутенер для базового типа. Моя лучшая попытка работает, но многословна: import cc.spray._ val maybeJson1: PartialFunction[Any, Js…
26 май '12 в 22:47
1 ответ

Несоответствие типов; найдено: Int(1) требуется: B

Я пытаюсь продлить List класс, чтобы дать ему более упорядоченный способ сравнения размеров, однако я сталкиваюсь с ошибкой в ​​названии... Вот мой код: implicit class RichList[A, B](input: List[A]) { def >(that: List[B]): Boolean = input.size &g…
5 ответов

Scala, расширяющий итератор

Я ищу расширенный итератор для создания нового метода takeWhileInclusive, который будет работать как takeWhile но включите последний элемент. Моя проблема в том, что является лучшей практикой для расширения итератора, чтобы он возвращал новый итерат…
1 ответ

Еще одна проблема Scala CanBuildFrom: оператор обогащения коллекции, который оборачивает другой объект другого типа

Пользователь Régis Jean-Gilles изящно ответил на мой предыдущий вопрос, где я боролся с CanBuildFrom и функциями обогащения (иначе говоря, "pimp my library" или "enrich my library"): Создание неявной функции, которая оборачивает map() в Scala с прав…
3 ответа

Смешивание общих признаков в параметризованных классах без дублирования параметров типа

Давайте предположим, что я хочу создать черту, которую я могу смешать с любым Traversable[T]. В конце я хочу сказать что-то вроде: val m = Map("name" -> "foo") with MoreFilterOperations и иметь методы для MoreFilterOperations, которые выражены во…
1 ответ

Как определить имплицитное преобразование из одного в другой существующий тип в Scala?

Допустим, у нас есть Foo класс в библиотеке, которую мы используем и хотим (в нашем кодовом файле) Foo случаи, которые будут неявно приведены к String случаи всякий раз, когда Foo экземпляр встречается в месте String экземпляр требуется. Как этого д…
16 окт '11 в 02:22
3 ответа

Вывод типа в анонимных функциях с помощью enrich-my-library

Скажем, у меня есть метод, который превращает (функция на два элемента) в (функция на две последовательности): def seqed[T](f: (T,T) => T): (Seq[T], Seq[T]) => Seq[T] = (_,_).zipped map f На словах результирующая функция занимает две последова…
3 ответа

Как я могу добавить новые методы к объекту библиотеки?

У меня есть класс из библиотеки (в частности, com.twitter.finagle.mdns.MDNSResolver). Я хотел бы расширить класс (я хочу, чтобы он возвращал Future[Set], а не Try[Group]). Я знаю, конечно, что я мог бы подкласс этого и добавить свой метод там. Тем н…
12 июн '13 в 17:59
1 ответ

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

Для DSL мне нужно неявно расширить значения функций. Например: trait PimpedFunction[-A, +B] extends Function1[A, B] { def foo = 42 } object PimpedFunction { implicit def pimp[A, B](f: Function1[A, B]): PimpedFunction[A, B] = new PimpedFunction[A, B]…
30 мар '13 в 20:36
1 ответ

Обогатить внутренний класс

Я хочу реализовать шаблон enrich-my-library для внутреннего класса, который будет работать для любого экземпляра внешнего класса. Что-то вроде этого: class Outer { class Inner(val x: Option[Inner] = None) { def test(y: Inner) {} } } implicit class E…
1 ответ

Как вы обогащаете классы стоимости без накладных расходов?

Scala 2.10 представляет классы значений, которые вы определяете, расширяя свой класс AnyVal, Существует множество ограничений на классы значений, но одно из их огромных преимуществ заключается в том, что они позволяют методы расширения без штрафа за…
13 фев '13 в 19:52