Scala:我无法控制其源的对象是否可以扩展特性?

Scala:我无法控制其源的对象是否可以扩展特性?,scala,Scala,假设我有这样的东西: object IceCream { trait IceCream case object ChocolateIceCream extends IceCream case object VanillaIceCream extends IceCream } 他的源代码不是我的,我不能更改。在另一个项目中,我想重复使用这个,让所有的冰淇淋口味成为另一个特性的一部分。我是被迫这样做的吗 object ThingsILike{ import IceCream._

假设我有这样的东西:

object IceCream {
  trait IceCream
  case object ChocolateIceCream extends IceCream
  case object VanillaIceCream   extends IceCream
}
他的源代码不是我的,我不能更改。在另一个项目中,我想重复使用这个,让所有的冰淇淋口味成为另一个特性的一部分。我是被迫这样做的吗

object ThingsILike{
  import IceCream._

  trait ThingsILike
  case object  Chocolate                   extends ThingsILike
  case class   IceCreamWrapper(x:IceCream) extends ThingsILike
}
或者该语言是否提供了一种自然扩展它们的方法(像Swift那样)?

您可以使用隐式方法向现有类“添加”方法。您可以使现有类成为子类,或者使用新类或特性通过isInstanceOf测试。 但是,您可以创建自己的unapply方法,使模式匹配可以执行任何您喜欢的操作。

您可以使用隐式方法向现有类“添加”方法。您可以使现有类成为子类,或者使用新类或特性通过isInstanceOf测试。
但是,您可以使用自己的unapply方法使模式匹配执行任何您喜欢的操作。

您可以使用extend my library模式或type类,具体取决于您想要执行的操作。@m-z在上面的示例中,我希望将
IceCream
对象与其他
ThingsILike
对象包含在同一集合中,这可能很有用:@JimN我几天前就在用它做实验,为了另一个问题,但是考虑到需要的魔法数量,我宁愿把它和模式匹配两次。我听说Dotty确实有未绑定的联合类型,所以这是值得期待的。谢谢您的帮助。您可以使用“扩展我的库”模式或类型类,具体取决于您要执行的操作。@m-z在上面的示例中,我希望将
IceCream
对象与其他
ThingsILike
对象包含在同一集合中,这可能很有用:@JimN我几天前就在用它做实验,为了另一个问题,但是考虑到需要的魔法数量,我宁愿把它和模式匹配两次。我听说Dotty确实有未绑定的联合类型,所以这是值得期待的。谢谢你的帮助。