簡體   English   中英

是否可以在Scala中匹配函數的返回類型?

[英]Is it possible to match on a function's return type in Scala?

我對Scala還是很陌生,所以仍然要弄清楚類型推斷系統可以做什么。 是否可以在Scala中執行以下操作?

abstract class BaseBar
class DerivedBar1 Extends BaseBar
class DerivedBar2 Extends BaseBar

def foo[T]: List[T] = {
  <T type> match {
    case DerivedBar1 => getSomethingOfTypeDerivedBar1
    case DerivedBar2 => getSomethingOfTypeDerivedBar2
  }
}

...然后可以安全地致電

val myDerivedBar1 = foo[DerivedBar1]()

... 要么

def getBar: DerivedBar2 = foo()

您可以通過使用隱式ClassTag參數“取消擦除”方法來匹配方法的type參數。

import scala.reflect.ClassTag

def foo[T](implicit t: ClassTag[T]) = t.runtimeClass match { /* ... */ }

至於基於預期返回類型的推斷:Scala確實將該上下文用作其類型推斷的一部分,但我認為您將很難使其在此處執行所需的操作。 例如:

def bar[T](implicit t: ClassTag[T]): List[T] = { println(t.runtimeClass); Nil }
val x: List[String] = bar

您可能希望/希望這將打印class java.lang.String ,但實際上它會打印class scala.runtime.Nothing$因為這是推斷T的最一般的選擇。 我不知道有什么辦法。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM