我尝试了解如何为类别和子类别建模。
这是我目前的实施:
function resize() {
var docWidth = $(window).width();
if (docWidth < 768){
var getData = $('#important').html();
$('.col-lg-3.hidden-xs #important').remove();
$('.col-lg-3.hidden-xs').append('<div id="important">'+getData+'</div>');
}
}
$(document).ready(function(){
resize();
$(window).resize(function() {
resize();
});
});
问题:
sealed trait First
sealed trait A extends First
sealed trait B extends First
case object A extends A
case object B extends B
sealed trait Second[M <: First]
case object A1 extends Second[A]
case object B1 extends Second[B]
case object B2 extends Second[B]
case object B3 extends Second[B]
部分First
First
为了使其具体化,以下是我想要实现的目标:
Second
答案 0 :(得分:0)
像这样的东西,也许:
sealed trait Catg
sealed trait SubCatgOf[X <: Catg] extends Catg
case object A extends Catg
case object B extends Catg
case object C extends Catg
case object A1 extends SubCatgOf[A.type]
case object A2 extends SubCatgOf[A.type]
case object A1x extends SubCatgOf[A1.type]
依靠A.type
有助于减少重复。
为了获得真正的树,你不得不求助于反射或一些宏观魔法。
或者你可以像这样手动定义它:
case class Node [X <: Catg](
category: X,
children: List[Node[_ <: SubCatgOf[X]]]
)
val hierarchy = Node(
A,
List(
Node(
A1,
List(
Node(A1x, Nil)
)
),
Node(A2, Nil)
)
)
可以通过一些拉皮条来改善。但那次定义了两次......所以我会尝试反思。