对象类型上的scala模式匹配和接受多种类型参数的方法
我想执行一个方法,它接受某个对象作为参数。我可以通过很多不同的物体。这些对象有不同的类型(不同类的实例),但它们都有公共方法(methodA、methodB)。因此,我在定义类型时遇到了问题,这就是我目前所做的示例。有人能帮忙修理吗对象类型上的scala模式匹配和接受多种类型参数的方法,scala,design-patterns,types,matching,Scala,Design Patterns,Types,Matching,我想执行一个方法,它接受某个对象作为参数。我可以通过很多不同的物体。这些对象有不同的类型(不同类的实例),但它们都有公共方法(methodA、methodB)。因此,我在定义类型时遇到了问题,这就是我目前所做的示例。有人能帮忙修理吗 sealed trait Foo final case class A(a: SomeClass1Type) extends Foo final case class B(b: SomeClass2Type) extends Foo object SomeObj
sealed trait Foo
final case class A(a: SomeClass1Type) extends Foo
final case class B(b: SomeClass2Type) extends Foo
object SomeObject {
implicit val executionContext: ExecutionContext = ExecutionContext.Implicits.global
val caseMatcher = new SomeClass1
// val caseMatcher = new SomeClass2
execute(caseMatcher)
def execute(caseMatcher: Either[SomeClass1Type, SomeClass2Type]) = {
caseMatcher match {
case a: A(SomeClass1) => executeCase1(new SomeClass1)
case b: B(SomeClass2) => executeCase2(new SomeClass2)
}
}
def executeCase1(param: SomeClass1Type) {
val a = param.methodA
val b = param.methodB
}
def executeCase2(caseMatcher: SomeClass2Type) {
val a = param.methodA
val b = param.methodB
}
}
看来你需要:
def main(args:Array[String]):单位={
val c1=某些类别1(1)
val c2=某些类别1(2)
val result1=进程(c1)//5
val result2=过程(c2)//8
}
def流程[T您似乎需要:
def main(args:Array[String]):单位={
val c1=某些类别1(1)
val c2=某些类别1(2)
val result1=进程(c1)//5
val result2=过程(c2)//8
}
def过程[T或者
不是联合类型-您需要匹配左或右。此外,方法重载在这里更容易实现。我知道我不能使用其中任何一种,但我在这里使用其中任何一种来显示我可以输入两种类型的eny,但我不知道如何解决它,因此execute方法可以接受这两种类型中的任何一种,我不知道应该使用哪种类型ld设置为execute方法中的caseMAtcher参数,以接受这两种类型中的任何一种,并且仍然能够访问executeCase@user我需要匹配左[Type1,Type2]或右[Type1,Type2]但是execute方法中caseMatcher的类型应该是什么,因为很明显我的IDE会抱怨。你想实现希望链接有帮助。或者
不是联合类型-你需要匹配左或右。另外,方法重载在这里更容易实现。我知道我不能使用任何一个,但我在这里使用任何一个来显示我可以输入eny是两种类型,但我不知道如何解决它,因此execute方法可以接受这两种类型中的任何一种,我不知道应该在execute方法中设置caseMAtcher参数的类型,以接受这两种类型中的任何一种,并且仍然能够访问executeCase@user我需要匹配左[Type1,Type2]或者是正确的[Type1,Type2],但是execute方法中caseMatcher的类型应该是什么,因为很明显我的IDE会抱怨。你想要实现,希望链接能有所帮助。
def main(args: Array[String]): Unit = {
val c1 = SomeClass1(1)
val c2 = SomeClass1(2)
val result1 = process(c1) // 5
val result2 = process(c2) // 8
}
def process[T <: {def multiply: Int; def sum: Int} ](t: T): Int = t.multiply + t.sum
case class SomeClass1(int: Int) {
def multiply: Int = int * 2
def sum: Int = int + 2
}
case class SomeClass2(int: Int) {
def multiply: Int = int * 3
def sum: Int = int + 3
}