首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >扩展具有具体类型的ListSet的问题

扩展具有具体类型的ListSet的问题
EN

Stack Overflow用户
提问于 2014-07-17 18:59:35
回答 1查看 45关注 0票数 1

尝试用ListSet类中的具体类型扩展一个ListSetConcreteType,然后每次需要一个ListSetConcreteType实例时,我都会传递一个桩实例。

代码语言:javascript
运行
复制
class Pile extends ListSet[Card]{
  def this(cards: ListSet[Card]){
    this()
    this ++ cards
  }
  def draw(amount: Int = 1): (Pile, Pile) = this.splitAt(amount)
}

在“绘制”方法中,编译器指责类型的表达式(ListSetCard,ListSetCard)不符合预期的类型(桩、桩),但简单地说:

代码语言:javascript
运行
复制
type Pile = ListSet[Card]

在堆体内解决问题。我真的应该使用类型别名和extend关键字吗?(我非常希望创建一个新的类,而不仅仅是给它提供别名)

ps:我的构造师看起来像疯了吗?这是我唯一能弄清楚的办法

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-07-17 19:30:04

问题是splitAt返回ListSet[Card],虽然Pile扩展了ListSet[Card],但它不是一堆。

避免此问题的一种方法是将结果从splitAt转换为Pile

代码语言:javascript
运行
复制
def draw(amount: Int = 1): (Pile, Pile) = {
  val (a,b) = this.splitAt(amount)
  (new Pile(a), new Pile(b))
}

的另一个想法.

您只希望返回Piles,以便使draw方法对结果可用。您可以在这里使用隐式类。现在,ListSet[Card]的所有实例都有了绘图方法。

代码语言:javascript
运行
复制
implicit class Pile(cards: ListSet[Card]) {
  def draw(amount: Int = 1) = cards.splitAt(amount)
}

很小的例子。

代码语言:javascript
运行
复制
type Card = Int

val pile = ListSet(1,2,3,4,5)

val (drawn, remaining) = pile.draw()

val (nextDrawn, nextRemaining) = remaining.draw(2) 
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/24811454

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档