Динамическая типизация Scala, границы типов и Java-объекты - это ожидаемое поведение или ошибка? - PullRequest
1 голос
/ 05 апреля 2011

Извините, если это уже было покрыто. Следующий простой пример динамической типизации и границ типов не работает со списком строк, но отлично работает с классом (scala), содержащим определенную функцию length (). Это ожидаемое поведение или ошибка? Если это ожидаемое поведение, есть ли способ определить границу типа так, чтобы она работала для объектов List of String, а также для списка произвольных объектов scala с длиной (функция 0?

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) 

1 Ответ

2 голосов
/ 05 апреля 2011

Это работает:

def sumlen[T <: {def length() : Int}](l : List[T]) : Int = {
//                         ^^

И да, это особенность, а не ошибка.

...