簡體   English   中英

具有泛型類型參數的函數中的結構類型

[英]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.

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