[英]Structural type in function with generic type parameter
在Scala中進行實驗時,我經常發現自己想要為定義foo
所有類型定義一個函數。 對於簡單的情況,我可以使用結構類型進行此操作,但是當需要類型參數時它會分崩離析。
這是一個簡單的例子:
def reverse[A](xs: { def reverse(): A }): A = xs.reverse
這編譯沒有錯誤,但在傳遞定義reverse
函數的類型時失敗,並出現以下錯誤:
scala> reverse("string")
<console>:13: error: type mismatch;
found : String("adsf")
required: AnyRef{def reverse(): ?}
reverse("adsf")
^
我也嘗試在類型參數[A <: { def reverse(): A }]
上定義結構邊界,但得到相同類型的結果。 看起來我可能是這里類型擦除的受害者(看到它期望reverse
的結果是?
)。
我不確定Scala的類型系統中是否存在這種類型約束,或者我是否遺漏了某些東西。 有沒有辦法為具有泛型參數的函數定義結構類型?
注意:我簡要地認為我在給定示例中的問題是reverse
實際上是在StringOps
定義的,而不是字符串。 不幸的是,將我的字符串包裝在StringOps
容器中會出現同樣的問題。
這對我有用:
def getReverse[A](xs: {def reverse: A}): A = xs.reverse
scala> getReverse("1234")
res10: scala.collection.immutable.WrappedString = 4321
顯然在沒有括號的結構類型中定義reverse
。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.