1
對不起,如果這已被覆蓋。以下動態類型和類型邊界的簡單示例不適用於字符串列表,但與包含定義的length()函數的(scala)類非常吻合。這是預期的行爲還是錯誤?如果是預期的行爲,有沒有一種方法來定義約束這樣的類型,它會爲一組字符串工作對象以及任意階對象的,其長度(0函數列表?Scala動態類型,類型邊界和java對象 - 是這種預期的行爲還是錯誤?
def sumlen[T <: {def length : Int}](l : List[T]) : Int = {
def sl(l : List[T], acc : Int) : Int = l match {
case Nil => acc
case h::t => sl(t, h.length + acc)
}
sl(l, 0)
}
val l1 = List("This", "is", "a", "test")
sumlen(l1)
感謝您的答覆和解決方案只是好奇,這背後的特殊「功能」的理由似乎有不一致其餘的語法和人工區分scala-native和java類。 – user693384 2011-04-06 15:33:51
@ user693384:功能是'def foo()'與'def foo'不同。通常情況下,如果使用sumlen(List(List(1,2,3),List(4,5,6),List(7),List(8)))'修正後的版本,它將不會像def length()和def長度是不同的,這個差別是一個特徵。你必須製作兩個版本。如果某個地方存在bug,那就是'String'上的'length()'接受一個空的參數列表,並且應該更無參數,因爲它是無副作用的。 – shellholic 2011-04-06 17:12:53
具有完美的感覺。謝謝。 – user693384 2011-04-06 19:28:36