2016-05-14 45 views
0

該代碼如何有未定義的輸入和輸出?

def partval(partID: Int, iter: Iterator[T >: Nothing]): Iterator[T >: Nothing] = { 
      iter.map(x => (partID, x)).toList.iterator } 

不起作用。在這個代碼中,Iterator中的確切類型應該不重要,我認爲所有東西都應該是超類型Nothing。我認爲Scala編譯器可以推斷類型,所以我預想的還要

def partval(partID: Int, iter: Iterator): Iterator = { 
      iter.map(x => (partID, x)).toList.iterator } 

def partval(partID, iter) = { 
      iter.map(x => (partID, x)).toList.iterator } 

工作,但事實並非如此。我如何得到這個運行?


編輯:

簽名def partval(partID: Int, iter: Iterator[T]): Iterator[(Int, T)]結果

Name: Compile Error 
Message: <console>:19: error: not found: type T 
     def partval2(partID: Int, iter: Iterator[T]): Iterator[(Int, T)] = { 
                    ^
<console>:19: error: not found: type T 
     def partval2(partID: Int, iter: Iterator[T]): Iterator[(Int, T)] = { 
+0

如果我有你你需要'def partval(partID:Int,iter:Iterator [T]):Iterator [(Int,T)]'。另外,爲什麼你需要'.toList.iterator'? –

+0

@VitaliyKotlyarenko:你最後一個問題是什麼意思?爲什麼我需要一個迭代器?這只是所需的輸出。爲什麼要toList?我不確定,但沒有它,它不起作用。 – Make42

+0

@VitaliyKotlyarenko:您的簽名會導致錯誤(請參閱問題)。 – Make42

回答

3

你並不需要指定任何類型的界限,接受所有類型:

def partval[T](partID: Int, iter: Iterator[T]): Iterator[(Int, T)] = { 
    iter.map(x => (partID, x)) 
}