2013-03-30 2 views
2

У меня есть, казалось бы, очень простой вопрос Scala, который сводит меня с ума. Это:Определите функцию в Scala, которая принимает массив подстановки в качестве параметра

class A 
class B extends A 
class C { def foo(a: Array[_ <: A]) { a(0) = a(1) }} 

Не компилируется. В нем говорится:

scala> class C { def foo(a: Array[_ <: A]) { a(0) = a(1) }} 
<console>:8: error: type mismatch; 
found : (some other)_$1(in method foo) 
required: _$1(in method foo) 
     class C { def foo(a: Array[_ <: A]) { a(0) = a(1) }} 

Я думаю, что понимаю; это потому, что нет гарантии, что все элементы «А» будут одного типа? Есть ли способ сделать эту работу, или я просто делаю что-то странное?

ответ

4

Может быть, вы имеете в виду

class C { def foo[T <: A](a: Array[T]) { a(0) = a(1) } } 

?

Это позволит foo работать с массивами A или его потомками, и он будет поддерживать тип (так что если вы его набрали только как B, он останется таким же).

+0

Большое спасибо за помощь. Это исправило эту проблему, но проблема на самом деле идет глубже, и проблема в том же ключе, но я задаю новый вопрос здесь: http://stackoverflow.com/questions/15723338/swapping-elements-of-two -arrays-в-Скал-с подстановочным типом. Я бы очень признателен, если бы вы могли помочь с этим. –