Описание тега f-bounded-polymorphism

Interfaces or classes having a type parameter which is a subtype of the interface itself, in any language; also known as the "curiously recurring template pattern". It helps defining chaining methods in a hierarchy of classes, or typed cloning methods.
0 ответов

Почему F-Bounded Type используется для добавления нового метода в существующую иерархию типов

Я читал следующую статью о решении проблемы выражения с использованием Java Generics. http://www.daimi.au.dk/~madst/ecoop04/main.pdf Автор предлагает первое решение с использованием F-ограниченных типов, чтобы гарантировать, что левый и правый парам…
20 сен '15 в 21:18
2 ответа

Проблема компиляции в Scala с F-ограниченными типами и экзистенциальными типами

Я использую F-ограниченный тип для того, чтобы иметь возможность вернуть текущий тип trait Board[T <: Board[T]] { def updated : T } И я пытаюсь написать универсальный вспомогательный метод, который использует его. Вопрос в следующем: почему следу…
1 ответ

Границы параметров типа с объектами Spark получить сложно

Я новичок в Scala, Я пытаюсь создать объект, который принимает ProbabilisticClassifier в качестве входных данных, и это дает CrossValidator модель в качестве выхода: import org.apache.spark.ml.classification.{ProbabilisticClassifier, ProbabilisticCl…
2 ответа

Разрешающие типы в F-ограниченном полиморфизме

У меня есть эти модели: trait Vehicle[T <: Vehicle[T]] { def update(): T } class Car extends Vehicle[Car] { def update() = new Car() } class Bus extends Vehicle[Bus] { def update() = new Bus() } Если я получу экземпляр Vehicle[Car] и вызвать upda…
24 фев '17 в 10:30
1 ответ

Почему scala не может определить тип для f-связанного полиморфизма?

Простой пример, иллюстрирующий проблему: trait WTF[W <: WTF[W]] { def get : Int } trait Zero extends WTF[Zero] { override def get : Int = 0 } case object Zero extends Zero final case class Box(inner : Int) extends WTF[Box] { override def get : In…
2 ответа

Scala F-ограниченный полиморфизм на объекте

Я не могу написать следующий F-ограниченный полиморфизм в Scala. Зачем? trait X[T <: X[T]] object Y extends X[Y] Как я могу выразить это и заставить его скомпилировать?
25 авг '15 в 12:20
6 ответов

Практическое использование для "Любопытно повторяющегося шаблона"

Какие практические применения для " шаблонов любопытных повторений"? Обычно показанный пример " подсчитанного класса" не является убедительным примером для меня.
1 ответ

Правильно ли расхождения с актерами Акки?

Я часто сталкиваюсь со следующей проблемой при использовании дженериков и актеров Akka: trait AuctionParticipantActor[P <: AuctionParticipant[P]] extends StackableActor { override def receive: Receive = { case message: Handled => participant =…
3 ответа

Несоответствие типов Scala, когда универсальный тип работает с тем же универсальным типом

У меня есть универсальный класс case Route, который принимает список подклассов Location. Однако в следующем методе я получаю несоответствие типов при вызове distance expected: head.T, actual: T case class Route[T <: Location](route: List[T]) { d…
08 июн '18 в 09:44
2 ответа

Есть ли способ вернуть полиморфное это в Java?

В Typescript есть эта концепция полиморфного возвращаемого типа this, https://www.typescriptlang.org/docs/handbook/advanced-types.html Пример: export abstract class Animal { private name: string; public setName(name: string): this { this.name = name…
1 ответ

Странная ошибка компиляции с существующими скалами с ограниченным полиморфизмом

Почему приведенный ниже код не компилируется? trait B[T <: B[T]] case class A[T <: B[T]](t: T) class C() extends B[C] val c: C = new C() val r2: A[_] = A(c) //compiles val r3: A[_] = A(c) //compiles fine val r4: A[_] = r3 //compiles fine val r…
1 ответ

Попытка моделировать F-ограниченный полиморфизм как член типа в Scala

Я хотел попробовать написать тип, методы которого могут быть однородными и возвращать значения одного типа: object SimpleTest { trait Foo extends Product with Serializable { type Self <: Foo def bar: Self } case class X() extends Foo { type Self …
05 май '14 в 21:13
1 ответ

Scala: ограничивающие черты, смешивающие f-ограниченные полиморфные черты

Я имею: trait Pet[T <: Pet[T]] { //disallows: Dog extends Pet[String] self: T => //disallows: Dog extends Pet[Monkey] def rename(s: String): T def name: String } Теперь черта как Feline что бы продлить Pet класс можно легко добавить следующим …
09 окт '17 в 11:01
1 ответ

Типы Скала и F ограниченные типы

Я изучаю F-связанные типы в Scala, и я столкнулся с ситуацией, когда я не знаю, в чем дело. Я сделал три теста, код выглядит следующим образом: import scala.collection.mutable def test1() = { trait Abstract { type ThisType <: Abstract def deepCop…
21 ноя '18 в 09:27
1 ответ

Почему компилятор scala говорит, что аргументы типа не соответствуют границам?

Я создал черту Combiner с подклассами Complex и IntCombiner, и моя цель - заставить Matrix работать как с Complex, так и с Int. Но по некоторым причинам это не компилируется, говоря, что [com.implicits.TestImplicits1.IntCombiner] do not conform to c…
2 ответа

F-ограниченные типы и методы с параметрами типов на сайтах аргументов и возврата

У меня есть F-ограниченный тип, и моя цель - создать метод с параметризацией типа, чтобы иметь возможность использовать его повторно. Вот пример кода: trait FType { type ThisType <: FType def deepCopy(): ThisType } class ConcreteType extends FTyp…
0 ответов

Как вывести Fbound параметризованного типа?

У меня есть f-связанный тип и другие типы, которые зависят от него. Я пытаюсь объявить их так, чтобы не требовалось явно указывать fbound для операций. Подробности в примере object WhatIWant { sealed trait FBound[F <: FBound[F]] sealed trait Dep[…
22 фев '16 в 01:02
1 ответ

Переменная числа Scala параметров, которые являются подклассами F-ограниченного типа

В C++ я могу создать шаблон функции переменной следующим образом: #include <tuple> // helper to loop over tuple template <std::size_t I = 0, typename FuncT, typename... Args> void for_each(std::tuple<Args...>& tuple, FuncT func…
1 ответ

Можно ли вернуть "это" в универсальном интерфейсе с реализацией по умолчанию, используя f-ограниченную квантификацию

public interface IEq<T> { public abstract Boolean testEqual(final T y); public default Boolean testNotEqual(final T y) { return !this.testEqual(y); } } public interface IOrd<T> extends IEq<T> { public abstract Boolean lessEqualThan…
26 май '18 в 10:35
1 ответ

Выражение ограниченного типа F как члена абстрактного типа

Я хочу преобразовать ограниченный F полиморфизм в члены абстрактного типа. trait FBoundedMovable[Self <: FBoundedMovable[Self]] { def moveTo(pos: Vect2): Self } в trait Movable { self => type Self <: (Movable { type Self = self.Self }) def …