В зависимости от пути, который зависит от пути, как вы указываете для конкретного объекта-объекта, что этот признак должен поддерживать дополнительную функцию? override trait
? Как вы относитесь к исходной черте, которую расширяет вычитание?Как абстрактно расширить зависимую от пути черту: «переопределить признак»?
В частности, я хочу, чтобы переопределить Delta
признака в каждом DeltaSet
объекта:
trait DeltaSet {
type PertainsTo
trait Delta {
val pertainsTo: PertainsTo
}
. . .
}
В английском языке это
«в том же DeltaSet
Каждый Delta
должны относиться к тому же рода вещи.» A DeltaSet
объект должен иметь возможность добавлять дополнительные атрибуты к значению Delta
, например source
здесь:
val deltaSet = new DeltaSet {
override type PertainsTo = UnorderedPair[TestNode]
override trait Delta /* extends DeltaSet.Delta?? */ { // <-- THE MYSTERY
val source: TestNode
}
. . .
}
В английском языке это «Каждый Delta
для deltaSet
также должен обеспечить источник.»
Так, Delta
классов для использования с этим DeltaSet
объектом должны переопределить атрибут source
, например:
case class MakeLinkDelta(fromNode: TestNode, toNode: TestNode)
extends deltaSet.Delta
{
override val pertainsTo = new UnorderedPair(fromNode, toNode)
override val source = fromNode
. . .
}
и аналогично для BreakLinkDelta
и других Deltas
для deltaSet
. (Каждый Delta
для этого DeltaSet
описывает изменения, которые необходимо внести в график. Другие DeltaSet
s содержат изменения совершенно разные виды объектов.)
Я пробовал много вариантов, в том числе trait BaseDelta {...}; type DeltaT <: BaseDelta
, и до сих пор ни один из них скомпилирован. Как вы «говорить» в Scala, «Для всего одного DeltaSet
, я хочу, чтобы требовать, чтобы каждый Delta
обеспечить атрибут source
?»
Можете ли вы объясните соответствующий принцип работы здесь? «Вы не можете переопределить зависящую от пути черту в анонимном классе»? «Вы не можете переопределить признак, зависящий от пути, где угодно»? «Каждый объект, зависящий от пути (' Delta'), должен расширять контейнер («DeltaSet')»? Я надеюсь, что последнее не является истинным принципом. –
Мы не можем переопределить черту. Для этого мы расширяем и переопределяем его элементы. Не уверен, что я понимаю ваш последний момент. При создании экземпляра черта не может оставаться признаком. – bjfletcher
Спасибо за «Мы не можем переопределить черту». (Может быть, это может пойти в ответ.) Уточнение последнего момента: в вашем решении класс Delta расширяет черту DeltaSet. Это кажется мне странным, например, сказать, что кубок - это своего рода шкаф. Есть ли какой-то принцип Scala, который требует этого? –