Scala 我可以创建一个包含多个动态方法和不同返回类型的类吗?
GoodReturnType对象的方法applyDynamic具有Int返回类型。正如所料,对其动态方法的调用也会返回Int 如果我们尝试添加另一个具有不同返回类型的动态方法,则applyDynamic的返回类型将是最常见的类型(任意)。所有的动态方法也是如此Scala 我可以创建一个包含多个动态方法和不同返回类型的类吗?,scala,Scala,GoodReturnType对象的方法applyDynamic具有Int返回类型。正如所料,对其动态方法的调用也会返回Int 如果我们尝试添加另一个具有不同返回类型的动态方法,则applyDynamic的返回类型将是最常见的类型(任意)。所有的动态方法也是如此 scala> GoodReturnType.foo() res0: Int = 25 是否可以让一个类具有多个具有不同返回类型的动态方法?这在原则上是不可能的,因为您是基于动态信息进行调度的。因此,即使您有一个以特定方式键入的响
scala> GoodReturnType.foo()
res0: Int = 25
是否可以让一个类具有多个具有不同返回类型的动态方法?这在原则上是不可能的,因为您是基于动态信息进行调度的。因此,即使您有一个以特定方式键入的响应,调用代码也不知道从可用集返回的是哪种类型。如果需要,您可以使用
或来明确表示(例如Left(5)
和Right(“muahahaha”)
将返回或[Int,String]
),但基本上,在经过动态分派步骤后,您无法保留静态键入。如果不打算将此作为动态调度步骤,为什么不直接将此方法放入?这在原则上是不可能的,因为您是基于动态信息进行调度的。因此,即使您有一个以特定方式键入的响应,调用代码也不知道从可用集返回的是哪种类型。如果需要,您可以使用或来明确表示(例如Left(5)
和Right(“muahahaha”)
将返回或[Int,String]
),但基本上,在经过动态分派步骤后,您无法保留静态键入。如果您不打算将其用作动态分派步骤,为什么不直接将该方法放入其中?不,您不能。存在一组固定的、预先确定的动态方法,所有非静态检查的引用都映射到这些方法。JVM不支持仅基于返回类型的方法解析,因此必须为给定的参数签名选择单个实现
如果你还没有,学习。不,你不能。存在一组固定的、预先确定的动态方法,所有非静态检查的引用都映射到这些方法。JVM不支持仅基于返回类型的方法解析,因此必须为给定的参数签名选择单个实现
如果你还没有,那就研究一下。>为什么不直接把这个方法放进去呢?只是一个语法示例,尽可能简单。问这个问题是因为我很好奇是否可以创建“动态”orm:user.findById(id:id):user;user.findAll():List[user],user.wheregegt(21):List[user];正如您所看到的,返回类型是不同的。我的猜测是“trait-Record-extends-Dynamic”,在invokeDynamic方法中使用解析器,但这不会起作用,因为我理解>为什么不直接将该方法放入?只是一个语法示例,尽可能简单。问这个问题是因为我很好奇是否可以创建“动态”orm:user.findById(id:id):user;user.findAll():List[user],user.wheregegt(21):List[user];正如您所看到的,返回类型是不同的。我的猜测是“trait-Record-extends-Dynamic”,在invokeDynamic方法中使用解析器,但据我所知,这是行不通的
scala> GoodReturnType.foo()
res0: Int = 25
object BadReturnType extends Dynamic {
def applyDynamic(method: String)(args: Any*) = {
method match {
case "foo" => 25
case "bar" => 14
case "baz" => "muahahaha!"
}
}
}
scala> BadReturnType.foo()
res1: Any = 25